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.