Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment changer le schéma de toutes les tables, vues et procédures stockées dans MSSQL

Oui, c'est possible.

Pour modifier le schéma d'un objet de base de données, vous devez exécuter le script SQL suivant :

ALTER SCHEMA NewSchemaName TRANSFER OldSchemaName.ObjectName

Où ObjectName peut être le nom d'une table, d'une vue ou d'une procédure stockée. Le problème semble être d'obtenir la liste de tous les objets de la base de données avec un nom shcema donné. Heureusement, il existe une table système nommée sys.Objects qui stocke tous les objets de la base de données. La requête suivante générera tous les scripts SQL nécessaires pour effectuer cette tâche :

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

Où le type 'U' désigne les tables utilisateur, 'V' désigne les vues et 'P' désigne les procédures stockées.

L'exécution du script ci-dessus générera les commandes SQL nécessaires pour transférer des objets d'un schéma à un autre. Quelque chose comme ça :

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;

Vous pouvez maintenant exécuter toutes ces requêtes générées pour terminer l'opération de transfert.