Compartir a través de


CREAR ESQUEMA (Transact-SQL)

[! INCLUDE [sql-asdb-asdbmi-asa-pdw-fabricse-fabricdw-fabricsqldb(.. /.. /includes/applies-to-version/sql-asdb-asdbmi-asa-pdw-fabricse-fabricdw-fabricsqldb.md)]

Crea un esquema en la base de datos actual. La CREATE SCHEMA transacción también puede crear tablas y vistas dentro del nuevo esquema y establecer GRANTpermisos , DENYo REVOKE en esos objetos.

Convenciones de sintaxis de Transact-SQL

Sintaxis

Sintaxis para SQL Server, Azure SQL Database y SQL Database en Microsoft Fabric.

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
    }

Sintaxis para Azure Synapse Analytics y Almacenamiento de datos paralelos.

CREATE SCHEMA schema_name [ AUTHORIZATION owner_name ] [;]

Argumentos

schema_name

Especifica el nombre del esquema dentro de la base de datos.

OWNER_NAME DE AUTORIZACIÓN

Especifica el nombre de la entidad de seguridad de la base de datos que poseerá el esquema. Esta entidad de seguridad podría ser propietaria de otros esquemas y podría no usar el esquema actual como su esquema predeterminado.

table_definition

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

view_definition

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

grant_statement

Especifica una GRANT instrucción que concede permisos a cualquier elemento protegible excepto el nuevo esquema.

revoke_statement

Especifica una REVOKE instrucción que revoca los permisos en cualquier elemento protegible excepto el nuevo esquema.

deny_statement

Especifica una DENY instrucción que deniega los permisos en cualquier elemento protegible excepto el nuevo esquema.

Observaciones

Las instrucciones que contienen CREATE SCHEMA AUTHORIZATION, pero no especifican un nombre, solo se permiten para la compatibilidad con versiones anteriores. La instrucción no produce un error, pero no crea un esquema.

CREATE SCHEMApuede crear un esquema, las tablas y vistas que contiene, y GRANTREVOKE, o DENY permisos en cualquier elemento protegible en una sola instrucción. Debe ejecutar esta instrucción como un lote independiente. Los objetos creados por la CREATE SCHEMA instrucción se crean dentro del esquema que se crea.

CREATE SCHEMA las transacciones son atómicas. Si se produce algún error durante la ejecución de una CREATE SCHEMA instrucción, no se crea ninguno de los elementos protegibles especificados y no se concede ningún permiso.

Puede enumerar los elementos protegibles que se van a crear en CREATE SCHEMA cualquier orden, excepto 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 GRANT instrucción puede conceder permiso en un objeto antes de crear el propio objeto o una CREATE VIEW instrucción puede aparecer antes de que las CREATE TABLE instrucciones que creen las tablas a las que hace referencia la vista. Además, CREATE TABLE las instrucciones pueden declarar claves externas en tablas que se definen más adelante en la CREATE SCHEMA instrucción .

Nota

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

La entidad de seguridad que se CREATE SCHEMA ejecuta puede especificar otra entidad de seguridad de base de datos como propietario del esquema que se va a crear. Esta acción requiere permisos adicionales, como se describe en la sección Permisos más adelante en este artículo.

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 propietario del esquema y tienen un valor NULL principal_id en sys.objects. Puede transferir la propiedad de los objetos contenidos en el esquema a cualquier entidad de seguridad de nivel de base de datos, pero el propietario del esquema siempre conserva el CONTROL permiso en los objetos del esquema.

Nota

Los esquemas no son equivalentes a los usuarios de la base de datos. Use vistas de catálogo del sistema para identificar las diferencias entre los usuarios y esquemas de la base de datos.

Creación implícita de esquemas y usuarios

Nota

Microsoft Entra ID era conocido anteriormente como Azure Active Directory (Azure AD).

En algunos casos, un usuario puede usar una base de datos sin tener una cuenta de usuario de base de datos (una entidad de seguridad de base de datos en la base de datos). Esta condición puede ocurrir en las situaciones siguientes:

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

  • 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), pero tiene 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 accede 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 una cuenta de usuario de base de datos crea un objeto sin especificar un esquema existente, una entidad de seguridad de base de datos y un esquema predeterminado se crean automáticamente en la base de datos para ese usuario. La entidad de seguridad y el esquema de base de datos creados tienen el mismo nombre que el nombre que usó el usuario al conectarse a SQL Server (el nombre de inicio de sesión de autenticación de 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 involuntaria 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.

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, la creación del usuario produce el error 2760: The specified schema name "<user@domain>" either does not exist or you do not have permission to use it. y, a continuación, el error 2759: CREATE SCHEMA failed due to previous errors.

Los intentos de crear o modificar esquemas producen el error 15151: Cannot find the user '', because it does not exist or you do not have permission., 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 de desuso

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

Permisos

Requiere permiso CREATE SCHEMA en la base de datos.

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

Para especificar otro usuario como propietario del esquema que se va a crear, el autor de la llamada debe tener IMPERSONATE permiso para ese usuario. Si se especifica un rol de base de datos como propietario, el autor de la llamada debe tener uno de los siguientes elementos: pertenencia al rol o ALTER permiso en el rol.

Para la sintaxis compatible con versiones anteriores, no se comprueba ningún permiso porque CREATE SCHEMA no se crea ningún esquema.

Permisos en Fabric Data Warehouse

En Fabric Data Warehouse, además del CREATE SCHEMA permiso, el usuario debe ser miembro del rol de área de trabajo Administrador, Miembro o Colaborador.

Ejemplos

Un. Creación de un esquema y concesión de 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. 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. Creación de 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 ejemplo siguiente se crea un Production esquema y se establece Mary como propietario.

CREATE SCHEMA Production AUTHORIZATION [Contoso\Mary];
GO