ALTER SCHEMA (Transact-SQL)

Transfiere un elemento protegible entre esquemas.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

ALTER SCHEMA schema_name 
   TRANSFER [ <entity_type> :: ] securable_name [;]

<entity_type> ::=
    {
    Object | Type | XML Schema Collection
    }

Argumentos

  • schema_name
    Es el nombre de un esquema de la base de datos actual, al que se moverá el elemento protegible. No puede ser SYS ni INFORMATION_SCHEMA.

  • <entity_type>
    Es la clase de entidad para la que se va a cambiar el propietario. El valor predeterminado es objeto.

  • securable_name
    Es el nombre de una o dos partes de un elemento protegible contenido en el esquema que se va a mover al esquema.

Comentarios

Usuarios y esquemas están completamente separados.

ALTER SCHEMA solo se puede utilizar para mover elementos protegibles entre esquemas de la misma base de datos. Para cambiar o quitar un elemento protegible de un esquema, use la instrucción ALTER o DROP específica para ese elemento protegible.

Si se usa un nombre de una parte para securable_name, se usarán las reglas de resolución de nombres actualmente vigentes para localizar el elemento protegible.

Todos los permisos asociados al elemento protegible se quitarán cuando se mueva el elemento protegible al nuevo esquema. Si el propietario del elemento protegible se ha establecido de forma explícita, el propietario no cambiará. Si el propietario del elemento protegible se ha establecido en SCHEMA OWNER, el propietario seguirá siendo SCHEMA OWNER; no obstante, después del traslado, SCHEMA OWNER se resolverá en el propietario del nuevo esquema. El principal_id del nuevo propietario será NULL

Para cambiar el esquema de una tabla o vista mediante SQL Server Management Studio, en el Explorador de objetos, haga clic con el botón secundario en la tabla o vista y, a continuación, haga clic en Diseño. Presione F4 para abrir la ventana Propiedades. En el cuadro Esquema, seleccione un nuevo 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).

Permisos

Para transferir un elemento protegible de un esquema a otro, el usuario actual debe tener el permiso CONTROL para el elemento protegible (no el esquema) y el permiso ALTER para el esquema de destino.

Si el elemento protegible tiene una especificación EXECUTE AS OWNER y el propietario se establece en SCHEMA OWNER, el usuario también debe tener el permiso IMPERSONATION para el propietario del esquema de destino.

Cuando se mueve el elemento protegible, se quitan todos los permisos asociados a él.

Ejemplos

A.Transferir la propiedad de una tabla

En el siguiente ejemplo se modifica el esquema HumanResources transfiriendo la tabla Address del esquema Person al esquema.

USE AdventureWorks2012;
GO
ALTER SCHEMA HumanResources TRANSFER Person.Address;
GO

B.Transferir la propiedad de un tipo

El ejemplo siguiente crea un tipo en el esquema Production y, a continuación, transfiere el tipo al esquema Person.

USE AdventureWorks2012;
GO

CREATE TYPE Production.TestType FROM [varchar](10) NOT NULL ;
GO

-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
    FROM sys.types JOIN sys.schemas 
        ON sys.types.schema_id = sys.schemas.schema_id 
    WHERE sys.types.name = 'TestType' ;
GO

-- Change the type to the Person schema.
ALTER SCHEMA Person TRANSFER type::Production.TestType ;
GO

-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
    FROM sys.types JOIN sys.schemas 
        ON sys.types.schema_id = sys.schemas.schema_id 
    WHERE sys.types.name = 'TestType' ;
GO

Vea también

Referencia

CREATE SCHEMA (Transact-SQL)

DROP SCHEMA (Transact-SQL)

EVENTDATA (Transact-SQL)