Compartir a través de


ALTER SCHEMA (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Transfiere un elemento protegible entre esquemas.

Convenciones de sintaxis de Transact-SQL

Sintaxis

-- Syntax for SQL Server and Azure SQL Database  

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

<entity_type> ::=  
    {  
    Object | Type | XML Schema Collection  
    }  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric

ALTER SCHEMA schema_name   
   TRANSFER [ OBJECT :: ] securable_name   
[;]  

Argumentos

schema_name

Esquema de destino de la base de datos actual. El elemento protegible se mueve a este esquema. No puede ser SYS ni INFORMATION_SCHEMA.

<entity_type>

Clase de la entidad para la que se va a cambiar el propietario. El valor predeterminado es objeto.

securable_name

Nombre de una o dos partes de un elemento protegible con ámbito de esquema que se va a mover al esquema.

Observaciones

Usuarios y esquemas están completamente separados. 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.

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 quitan cuando el elemento protegible se mueve al nuevo esquema. Si el propietario del elemento protegible se ha establecido explícitamente, el propietario permanece sin cambios. 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. Del principal_id nuevo propietario será NULL.

Importante

Si usa ALTER SCHEMA para transferir un procedimiento almacenado, una función, una vista o un desencadenador a otro esquema, no cambiará el nombre del esquema, si está presente, del objeto en la definition columna de la vista de catálogo sys.sql_modules o en el resultado de la función integrada OBJECT_DEFINITION . Por lo tanto, ALTER SCHEMA no se debe usar para mover estos tipos de objeto. En su lugar, quite el objeto y vuelva a crearlo en el nuevo esquema.

Mover un objeto como una tabla o una columna no hace que las referencias a ese objeto se actualicen automáticamente. Será necesario pues modificar de forma manual los objetos que hagan referencia al objeto que se ha movido. Por ejemplo, si se mueve una tabla y en un desencadenador existe una referencia a esa tabla, será necesario modificar el desencadenador para reflejar el nuevo nombre de esquema. Use sys.sql_expression_dependencies para ver las dependencias del objeto antes de moverlo.

Para cambiar el esquema de una tabla mediante SQL Server Management Studio, en el Explorador de objetos, haga clic con el botón derecho en la tabla y, a continuación, seleccione Diseño. Presione F4 para abrir la ventana Propiedades. En el cuadro Esquema, seleccione un nuevo esquema.

ALTER SCHEMA usa un bloqueo de nivel de esquema.

Precaución

En el punto de conexión de Sql Analytics de Fabric, no se admite la transferencia de una tabla entre esquemas a través de T-SQL. Puede afectar negativamente a la operación de sincronización entre OneLake y el punto de conexión de SQL Analytics.

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 IMPERSONATE para el propietario del esquema de destino.

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

Ejemplos

Un. Transferir la propiedad de una tabla

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

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

B. Transferencia de 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 AdventureWorks2022;  
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  

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

C. Transferir la propiedad de una tabla

En el siguiente ejemplo se crea una tabla Region en el esquema dbo, se crea un esquema Sales y, por último, se mueve la tabla Region desde el esquema dbo al esquema Sales.

CREATE TABLE dbo.Region   
    (Region_id INT NOT NULL,  
    Region_Name CHAR(5) NOT NULL)  
WITH (DISTRIBUTION = REPLICATE);  
GO  

CREATE SCHEMA Sales;  
GO  

ALTER SCHEMA Sales TRANSFER OBJECT::dbo.Region;  
GO