Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come modificare lo schema di tutte le tabelle, viste e stored procedure in MSSQL

Sì, è possibile.

Per modificare lo schema di un oggetto database è necessario eseguire il seguente script SQL:

ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.ObjectName

Dove ObjectName può essere il nome di una tabella, una vista o una procedura memorizzata. Il problema sembra essere ottenere l'elenco di tutti gli oggetti del database con un dato nome shcema. Per fortuna, esiste una tabella di sistema denominata sys.Objects che memorizza tutti gli oggetti del database. La seguente query genererà tutti gli script SQL necessari per completare questa attività:

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'))

Dove il tipo "U" indica le tabelle utente, "V" indica le viste e "P" indica le procedure memorizzate.

L'esecuzione dello script precedente genererà i comandi SQL necessari per trasferire gli oggetti da uno schema all'altro. Qualcosa del genere:

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;

Ora puoi eseguire tutte queste query generate per completare l'operazione di trasferimento.