sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man ändrar schema för alla tabeller, vyer och lagrade procedurer i MSSQL

Ja, det är möjligt.

För att ändra schemat för ett databasobjekt måste du köra följande SQL-skript:

ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.ObjectName

Där ObjectName kan vara namnet på en tabell, en vy eller en lagrad procedur. Problemet verkar vara att få listan över alla databasobjekt med ett givet shcema-namn. Tack och lov finns det en systemtabell som heter sys.Objects som lagrar alla databasobjekt. Följande fråga kommer att generera alla SQL-skript som behövs för att slutföra denna uppgift:

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

Där typ 'U' betecknar användartabeller, 'V' betecknar vyer och 'P' betecknar lagrade procedurer.

Genom att köra skriptet ovan genereras de SQL-kommandon som behövs för att överföra objekt från ett schema till ett annat. Något så här:

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;

Nu kan du köra alla dessa genererade frågor för att slutföra överföringen.



  1. PHP/MYSQL Ladda upp, importera .csv-fil till mysql-process-table design

  2. Mellan uttalanden saknas index i vissa fall

  3. MySQL:hur man får x antal resultat per gruppering

  4. MySQL Bulk Insert via PHP