Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So ändern Sie das Schema aller Tabellen, Ansichten und gespeicherten Prozeduren in MSSQL

Ja, es ist möglich.

Um das Schema eines Datenbankobjekts zu ändern, müssen Sie das folgende SQL-Skript ausführen:

ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.ObjectName

Dabei kann ObjectName der Name einer Tabelle, einer Ansicht oder einer gespeicherten Prozedur sein. Das Problem scheint darin zu bestehen, die Liste aller Datenbankobjekte mit einem bestimmten Shcema-Namen zu erhalten. Glücklicherweise gibt es eine Systemtabelle namens sys.Objects, die alle Datenbankobjekte speichert. Die folgende Abfrage generiert alle erforderlichen SQL-Skripts, um diese Aufgabe abzuschließen:

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

Wobei Typ 'U' Benutzertabellen bezeichnet, 'V' Ansichten bezeichnet und 'P' gespeicherte Prozeduren bezeichnet.

Durch Ausführen des obigen Skripts werden die SQL-Befehle generiert, die zum Übertragen von Objekten von einem Schema in ein anderes erforderlich sind. Etwa so:

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;

Jetzt können Sie alle diese generierten Abfragen ausführen, um den Übertragungsvorgang abzuschließen.