sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo cambiar el esquema de todas las tablas, vistas y procedimientos almacenados en MSSQL

Sí, es posible.

Para cambiar el esquema de un objeto de base de datos, debe ejecutar el siguiente script SQL:

ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.ObjectName

Donde ObjectName puede ser el nombre de una tabla, una vista o un procedimiento almacenado. El problema parece ser obtener la lista de todos los objetos de la base de datos con un nombre de shcema determinado. Afortunadamente, hay una tabla de sistema llamada sys.Objects que almacena todos los objetos de la base de datos. La siguiente consulta generará todos los scripts SQL necesarios para completar esta tarea:

SELECT 'ALTER SCHEMA NewSchemaName TRANSFER [' + SysSchemas.Name + '].[' + DbObjects.Name + '];'
FROM sys.Objects DbObjects
INNER JOIN sys.Schemas SysSchemas ON DbObjects.schema_id = SysSchemas.schema_id
WHERE SysSchemas.Name = 'OldSchemaName'
AND (DbObjects.Type IN ('U', 'P', 'V'))

Donde el tipo 'U' denota tablas de usuario, 'V' denota vistas y 'P' denota procedimientos almacenados.

Ejecutar el script anterior generará los comandos SQL necesarios para transferir objetos de un esquema a otro. Algo como esto:

ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.CONTENT_KBArticle;
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.Proc_Analytics_Statistics_Delete;
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.Proc_CMS_QueryProvider_Select;
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.COM_ShoppingCartSKU;
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.CMS_WebPart;
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.Polls_PollAnswer;

Ahora puede ejecutar todas estas consultas generadas para completar la operación de transferencia.