CREATE SCHEMA (Transact-SQL)

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

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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 
    }

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 que puede protegerse, excepto el esquema nuevo.

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

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

Notas

[!NOTA]

Las instrucciones que contienen CREATE SCHEMA AUTHORIZATION pero no especifican ningún nombre sólo se admiten por razones de compatibilidad con versiones anteriores.

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 que puede protegerse; 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 que pueden protegerse especificados ni se conceden permisos.

Los elementos que pueden protegerse, 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 sobre 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 base de datos: usuario de base de datos, función de la base de datos o función 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 base de datos, pero el propietario del esquema siempre mantiene el permiso CONTROL sobre los objetos dentro del esquema.

Nota de advertenciaAdvertencia

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).

Nota sobre los elementos obsoletos

Las instrucciones CREATE SCHEMA que no especifican un 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 característica se quitará en una versión futura 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 una función de base de datos como el propietario, el autor de la llamada debe pertenecer a la función o debe tener el permiso ALTER para la función.

[!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

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 AdventureWorks;
GO
CREATE SCHEMA Sprockets AUTHORIZATION Annik
    CREATE TABLE NineProngs (source int, cost int, partnumber int)
    GRANT SELECT TO Mandar
    DENY SELECT TO Prasanna;
GO