Compartir a través de


CREATE SCHEMA (Transact-SQL)

Actualizado: 17 de julio de 2006

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 referenciada debe crearse antes de la vista a la que hace 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] En SQL Server 2005, DENY y REVOKE son compatibles 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 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.

ms189462.Caution(es-es,SQL.90).gifAdvertencia:
En SQL Server 2005, el comportamiento de los esquemas es distinto al de las versiones anteriores de SQL Server. Si en el código se supone que los esquemas son equivalentes a usuarios de base de datos, los resultados obtenidos podrían ser incorrectos. Las vistas de catálogo antiguas, incluida sysobjects, no deben usarse en una base de datos en la que se ha usado alguna 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 una base de datos en la que se ha usado alguna de estas instrucciones, deben usarse 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 establece 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 desaprobación

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

Vea también

Referencia

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)

Otros recursos

Separación de esquemas de usuario

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

17 de julio de 2006

Contenido modificado:
  • Se corrigió la sintaxis.