CREATE SCHEMA (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Crea un esquema en la base de datos actual. La transacción CREATE SCHEMA también puede crear tablas y vistas dentro del nuevo esquema, así como establecer la concesión, denegación o revocación (GRANT, DENY o REVOKE) de permisos en esos objetos.

Convenciones de sintaxis de Transact-SQL

Sintaxis

-- Syntax for SQL Server and Azure SQL Database  
  
CREATE SCHEMA schema_name_clause [ <schema_element> [ ...n ] ]  
  
<schema_name_clause> ::=  
    {  
    schema_name  
    | AUTHORIZATION owner_name  
    | schema_name AUTHORIZATION owner_name  
    }  
  
<schema_element> ::=   
    {   
        table_definition | view_definition | grant_statement |   
        revoke_statement | deny_statement   
    }  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

schema_name
Es el nombre por el que se identifica al esquema en esta base de datos.

AUTHORIZATION owner_name
Especifica el nombre de la entidad de seguridad de la base de datos que poseerá el esquema. Es posible que esta entidad de seguridad posea otros esquemas y no utilice el esquema actual como predeterminado.

table_definition
Especifica una instrucción CREATE TABLE que crea una tabla en el esquema. La entidad de seguridad que ejecuta esta instrucción debe tener el permiso CREATE TABLE en la base de datos actual.

view_definition
Especifica una instrucción CREATE VIEW que crea una vista en el esquema. La entidad de seguridad que ejecuta esta instrucción debe tener el permiso CREATE VIEW en la base de datos actual.

grant_statement
Especifica una instrucción GRANT que otorga permisos sobre cualquier elemento protegible, excepto el esquema nuevo.

revoke_statement
Especifica una instrucción REVOKE que revoca permisos sobre cualquier elemento protegible, excepto el esquema nuevo.

deny_statement
Especifica una instrucción DENY que deniega permisos sobre cualquier elemento protegible, excepto el esquema nuevo.

Observaciones

Nota

Las instrucciones que contienen CREATE SCHEMA AUTHORIZATION pero no especifican ningún nombre solo se admiten por razones de compatibilidad con versiones anteriores. La instrucción no provoca errores, pero no crea esquemas.

CREATE SCHEMA puede crear un esquema, las tablas y las vistas que lo contienen; asimismo, puede tener permisos GRANT, REVOKE o DENY para cualquier elemento protegible; todo ello en una sola instrucción. Esta instrucción debe ejecutarse como un lote independiente. Los objetos creados por la instrucción CREATE SCHEMA se crean dentro del esquema que se está creando.

Las transacciones CREATE SCHEMA son atómicas. Si ocurre un error durante la ejecución de una instrucción CREATE SCHEMA, no se crea ninguno de los elementos protegibles especificados ni se conceden permisos.

Los elementos protegibles, que va a crear CREATE SCHEMA, se pueden enumerar en cualquier orden, excepto en el caso de las vistas que hacen referencia a otras vistas. En estos casos, la vista a la que se hace referencia debe crearse antes que la vista que hace la referencia.

Por lo tanto, una instrucción GRANT puede conceder permiso para un objeto antes de que ese objeto se haya creado o una instrucción CREATE VIEW puede aparecer antes que las instrucciones CREATE TABLE que crean las tablas a las que hace referencia la vista. Además, las instrucciones CREATE TABLE pueden declarar claves externas a las tablas definidas posteriormente en la instrucción CREATE SCHEMA.

Nota

DENY y REVOKE se admiten dentro de instrucciones CREATE SCHEMA. Las cláusulas DENY y REVOKE se ejecutarán en el orden en que aparecen en la instrucción CREATE SCHEMA.

La entidad de seguridad que ejecuta CREATE SCHEMA puede especificar otra entidad de seguridad de base de datos como el propietario del esquema que se crea. Esto requiere permisos adicionales, como se describe en la sección "Permisos", más adelante en este tema.

El esquema nuevo es propiedad de una de las siguientes entidades de seguridad de nivel de base de datos: usuario de base de datos, rol de base de datos o rol de aplicación. Los objetos creados dentro de un esquema son propiedad del esquema y tienen un principal_id NULL en sys.objects. La propiedad de los objetos incluidos en el esquema puede transferirse a cualquier entidad de seguridad de nivel de base de datos, pero el propietario del esquema siempre mantiene el permiso CONTROL en los objetos del esquema.

Precaución

El comportamiento de los esquemas cambió en SQL Server 2005. En consecuencia, el código que supone que los esquemas son equivalentes a los usuarios de base de datos puede dejar de devolver resultados correctos. Las antiguas vistas de catálogo, incluida sysobjects, no se deben usar en una base de datos en la que se haya utilizado alguna vez cualquiera de las siguientes instrucciones DDL: CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION. En esas bases de datos, debe usar las nuevas vistas de catálogo. En las nuevas vistas de catálogo se tiene en cuenta la separación de entidades de seguridad y esquemas que se estableció en SQL Server 2005. Para obtener más información sobre las vistas de catálogo, vea Vistas de catálogo (Transact-SQL).

Esquema implícito y creación de usuario

Nota:

El identificador de Microsoft Entra se conocía anteriormente como Azure Active Directory (Azure AD).

En algunos casos, un usuario puede usar una base de datos sin necesidad de tener una cuenta de usuario de base de datos (una entidad de seguridad de base de datos en la base de datos). El error puede ocurrir en las siguientes situaciones:

  • Un inicio de sesión tiene privilegios CONTROL SERVER.

  • Un usuario de Windows no tiene una cuenta de usuario de base de datos individual (una entidad de seguridad de base de datos en la base de datos), sino que obtiene acceso a una base de datos como miembro de un grupo de Windows que tiene una cuenta de usuario de base de datos (una entidad de seguridad de base de datos para el grupo de Windows).

  • Un usuario de Microsoft Entra no tiene una cuenta de usuario de base de datos individual (una entidad de seguridad de base de datos en la base de datos), pero tiene acceso a una base de datos como miembro de un grupo de Microsoft Entra que tiene una cuenta de usuario de base de datos (una entidad de seguridad de base de datos para el grupo Microsoft Entra).

Cuando un usuario sin cuenta de usuario de base de datos crea un objeto sin especificar un esquema existente, se crea automáticamente una entidad de seguridad de base de datos y un esquema predeterminado en la base de datos para ese usuario. La entidad de seguridad de base de datos y el esquema que se creen tendrán el mismo nombre que el usuario empleado para conectarse a SQL Server (el nombre de inicio de sesión de autenticación en SQL Server o el nombre de usuario de Windows).

Este comportamiento es necesario para permitir a los usuarios basados en grupos de Windows crear y poseer objetos. Sin embargo, puede dar lugar a la creación accidental de esquemas y usuarios. Para evitar crear implícitamente usuarios y esquemas, siempre que sea posible cree explícitamente entidades de seguridad de base de datos y asigne un esquema predeterminado. O establezca explícitamente un esquema existente cuando cree objetos en una base de datos, utilizando nombres de objetos de dos o tres elementos.

Nota:

La creación implícita de un usuario de Microsoft Entra no es posible en SQL Database. Dado que la creación de un usuario de Microsoft Entra desde un proveedor externo debe comprobar el estado del usuario en el identificador de Microsoft Entra, al crear el usuario se producirá el error 2760: el nombre de esquema especificado "<user_name@domain>" no existe o no tiene permiso para usarlo. Y, a continuación, error 2759: ERROR CREATE SCHEMA debido a errores anteriores. Los intentos de crear o modificar esquemas producirán el error 15151: No se encuentra el usuario "", ya que no existe o no tiene permiso. Además, seguido del error 2759. Para solucionar estos errores, cree el usuario de Microsoft Entra desde un proveedor externo o modifique el grupo de Microsoft Entra para asignar un esquema predeterminado. Luego, vuelva a ejecutar la instrucción que crea el objeto.

En el punto de conexión de SQL Analytics y Warehouse en Microsoft Fabric, los nombres de esquema no pueden contener / ni \ terminar con ..

Aviso sobre elementos desusados

Las instrucciones CREATE SCHEMA que no especifiquen ningún nombre de esquema se admiten actualmente por razones de compatibilidad con versiones anteriores. Estas instrucciones no crean realmente un esquema dentro de la base de datos, sino que crean tablas y vistas, y conceden permisos. Las entidades de seguridad no necesitan el permiso CREATE SCHEMA para ejecutar esta forma anterior de CREATE SCHEMA, ya que en realidad no se crea ningún esquema. Esta funcionalidad se quitará de una próxima versión de SQL Server.

Permisos

Requiere el permiso CREATE SCHEMA en la base de datos.

Para crear un objeto especificado dentro de la instrucción CREATE SCHEMA, el usuario debe tener el permiso CREATE correspondiente.

Para especificar otro usuario como el propietario del esquema que se está creando, el autor de la llamada debe tener el permiso IMPERSONATE sobre ese usuario. Si se especifica un rol de base de datos como propietario, el autor de la llamada debe pertenecer al rol o debe tener el permiso ALTER para el rol.

Nota

En la sintaxis compatible con las versiones anteriores, no se comprueban los permisos CREATE SCHEMA porque no se está creando ningún esquema.

Ejemplos

A. Crear un esquema y conceder permisos

En el ejemplo siguiente se crea el esquema Sprockets, que es propiedad de Annik y contiene la tabla NineProngs. La instrucción concede el permiso SELECT a Mandar y deniega el permiso SELECT a Prasanna. Tenga en cuenta que Sprockets y NineProngs se crean en una sola instrucción.

USE AdventureWorks2022;  
GO  
CREATE SCHEMA Sprockets AUTHORIZATION Annik  
    CREATE TABLE NineProngs (source int, cost int, partnumber int)  
    GRANT SELECT ON SCHEMA::Sprockets TO Mandar  
    DENY SELECT ON SCHEMA::Sprockets TO Prasanna;  
GO   

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

B. Crear un esquema y una tabla en el esquema

En el siguiente ejemplo se crea un esquema Sales y, luego, una tabla Sales.Region en ese esquema.

CREATE SCHEMA Sales;  
GO
  
CREATE TABLE Sales.Region   
(Region_id INT NOT NULL,  
Region_Name CHAR(5) NOT NULL)  
WITH (DISTRIBUTION = REPLICATE);  
GO  

C. Establecer el propietario de un esquema

En el siguiente ejemplo se crea un esquema Production, propiedad de Mary.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];  
GO  

Consulte también

ALTER SCHEMA (Transact-SQL)
DROP SCHEMA (Transact-SQL)
GRANT (Transact-SQL)
DENY (Transact-SQL)
REVOKE (Transact-SQL)
CREATE VIEW (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.schemas (Transact-SQL)
Crear un esquema de la base de datos