Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como alterar o esquema de todas as tabelas, visualizações e procedimentos armazenados no MSSQL


Sim, é possível.

Para alterar o esquema de um objeto de banco de dados, você precisa executar o seguinte script SQL:
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.ObjectName

Onde ObjectName pode ser o nome de uma tabela, uma exibição ou um procedimento armazenado. O problema parece estar obtendo a lista de todos os objetos de banco de dados com um determinado nome shcema. Felizmente, existe uma tabela de sistema chamada sys.Objects que armazena todos os objetos do banco de dados. A consulta a seguir gerará todos os scripts SQL necessários para concluir esta tarefa:
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'))

Onde o tipo 'U' denota tabelas de usuários, 'V' denota visualizações e 'P' denota procedimentos armazenados.

A execução do script acima gerará os comandos SQL necessários para transferir objetos de um esquema para outro. Algo assim:
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;

Agora você pode executar todas essas consultas geradas para concluir a operação de transferência.