Contexte: Certaines de nos contraintes de colonne par défaut ont été générées sans noms explicites, nous obtenons donc des noms amusants qui varient d'un serveur à l'autre comme: DF__User__TimeZoneIn__5C4D869D
Je préférerais les avoir tous gérables avec un nom cohérent comme DF_Users_TimeZoneInfo
pour que nous puissions nous assurer que les contraintes appropriées existent sur les futures tables cibles (comme dans RedGate compare, ou même simplement visuellement)
J'ai un script qui fonctionne principalement pour ce que je veux:
select 'sp_rename N''[' + s.name + '].[' + d.name + ']'',
N''[DF_' + t.name + '_' + c.name + ']'', ''OBJECT'';'
from sys.tables t
join
sys.default_constraints d
on d.parent_object_id = t.object_id
join
sys.columns c
on c.object_id = t.object_id
and c.column_id = d.parent_column_id
join sys.schemas s
on t.schema_id = s.schema_id
WHERE d.NAME like 'DF[_][_]%'
Mais cela me donne juste un jeu de résultats, et non quelque chose que je peux réellement passer à un exécuteur ou autre.
Comment puis-je faire cela pour que je puisse simplement exécuter ces sp_rename
scripts sans avoir à recourir à la copie de tous les éléments retournés et à les coller dans une nouvelle fenêtre de requête et à les réexécuter? Essayer d'enregistrer autant de frappes que possible pour que je puisse corriger cela dans de nombreux environnements.
la source
Réponses:
Ok, deux ou trois choses.
EXEC
lors de l'exécution de procédures stockées; la sténographie sansEXEC
fonctionne uniquement lorsqu'il s'agit de la première instruction du lot (et ce ne sera pas le cas ici).QUOTENAME()
au lieu d'appliquer manuellement des crochets. Dans ce cas, vous êtes probablement en sécurité, mais il y a des cas où l'approche manuelle se cassera.vous pouvez tester la
PRINT
sortie mais elle ne sera pas nécessairement complète si votre commande totale est> 8k (voir cette astuce pour quelques approches alternatives ).la source
sp_help; sp_help;
.Sur la base de votre question .. que vous avez supprimée "automatiser le même script sur certaines des bases de données de l'instance"
Voici le code qui vous aidera
la source