Je souhaite supprimer toutes les contraintes par défaut, vérifier les contraintes, les contraintes uniques, les clés primaires et les clés étrangères de toutes les tables d'une base de données SQL Server. Je sais comment obtenir tous les noms de contraintes sys.objects
, mais comment remplir la ALTER TABLE
pièce?
sql-server
ddl
constraint
Aaron Bertrand
la source
la source
Réponses:
Vous pouvez facilement dériver ces informations en vous joignant
sys.tables.object_id = sys.objects.parent_object_id
à ces types d'objets.PRINT
est juste là pour le globe oculaire - si vous avez beaucoup de contraintes, il peut ne pas afficher l'intégralité du script car il est limité à 8K. Dans ces cas, consultez cette astuce pour d'autres façons de valider le script avant de l'exécuter.Une fois que vous êtes satisfait du résultat, décommentez le
EXEC
.la source
ORDER BY (CASE WHEN c.[type] IN ('PK', 'UQ') THEN 1 ELSE 0 END)
J'ai commencé avec la réponse acceptée et modifié la structure pour utiliser une boucle while plutôt que pour construire l'instruction sql complète dans sql dynamique. J'aime mieux cela pour plusieurs raisons.
La requête n'est pas stockée dans la grande variable @sql. Cette implémentation permet une impression pour chaque contrainte supprimée à des fins de journalisation dans la sortie. L'exécution a semblé un peu plus rapide dans mes tests unitaires.
la source