ALTER SCHEMA (Transact-SQL)
Transfiere un elemento que puede protegerse entre esquemas.
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 que puede protegerse. No puede ser SYS ni INFORMATION_SCHEMA.<entity_type>
Es la clase de entidad en 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 que puede protegerse contenido en el esquema que se va a mover al esquema.
Notas
Usuarios y esquemas están completamente separados. Para obtener más información, vea Separación de esquemas de usuario.
ALTER SCHEMA sólo se puede utilizar para mover elementos que pueden protegerse entre esquemas de la misma base de datos. Para cambiar o quitar un elemento que puede protegerse de un esquema, use la instrucción ALTER o DROP específica para ese elemento.
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 que puede protegerse.
Todos los permisos asociados al elemento que puede protegerse se quitarán cuando se mueva el elemento al nuevo esquema. Si el propietario del elemento que puede protegerse se ha establecido de forma explícita, el propietario no cambiará. Si el propietario del elemento que puede protegerse se ha establecido en SCHEMA OWNER, el propietario seguirá siendo SCHEMA OWNER; no obstante, después del traslado, SCHEMA OWNER se resolverá al 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.
Advertencia |
---|
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 que puede protegerse de un esquema a otro, el usuario actual debe tener el permiso CONTROL para el elemento (no el esquema) y el permiso ALTER para el esquema de destino.
Si el elemento que puede protegerse 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 que puede protegerse, 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 AdventureWorks;
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 AdventureWorks;
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
Historial de cambios
Contenido actualizado |
---|
Sintaxis corregida agregando las opciones de colección de esquemas XML y tipo. |
Agregado el ejemplo B. |
Vea también