Ja, het is mogelijk.
Om het schema van een database-object te wijzigen, moet u het volgende SQL-script uitvoeren:
ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.ObjectName
Waar ObjectName de naam kan zijn van een tabel, een weergave of een opgeslagen procedure. Het probleem lijkt de lijst te krijgen van alle database-objecten met een bepaalde shcema-naam. Gelukkig is er een systeemtabel met de naam sys.Objects die alle database-objecten opslaat. De volgende query genereert alle benodigde SQL-scripts om deze taak te voltooien:
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'))
Waar type 'U' staat voor gebruikerstabellen, staat 'V' voor weergaven en 'P' voor opgeslagen procedures.
Als u het bovenstaande script uitvoert, worden de SQL-opdrachten gegenereerd die nodig zijn om objecten van het ene schema naar het andere over te brengen. Zoiets als dit:
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 kunt u al deze gegenereerde zoekopdrachten uitvoeren om de overdracht te voltooien.