Ano, je to možné.
Chcete-li změnit schéma databázového objektu, musíte spustit následující skript SQL:
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.ObjectName
Kde ObjectName může být název tabulky, pohledu nebo uložené procedury. Problém se zdá být získání seznamu všech databázových objektů s daným názvem shcema. Naštěstí existuje systémová tabulka s názvem sys.Objects, která ukládá všechny databázové objekty. Následující dotaz vygeneruje všechny potřebné SQL skripty k dokončení tohoto úkolu:
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'))
Kde typ „U“ označuje uživatelské tabulky, „V“ označuje pohledy a „P“ označuje uložené procedury.
Spuštěním výše uvedeného skriptu se vygenerují příkazy SQL potřebné k přenosu objektů z jednoho schématu do druhého. Něco takového:
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;
Nyní můžete spustit všechny tyto vygenerované dotazy k dokončení operace přenosu.