Quelle est la différence entre ces scripts?Différence entre WITH NOCHECK CHECK CONSTRAINT et CHECK CONSTRAINT
ALTER TABLE Post_Send WITH NOCHECK CHECK CONSTRAINT [My_FOREIGN_KEY];
GO
ALTER TABLE Post_Send CHECK CONSTRAINT [My_FOREIGN_KEY];
GO
Quelle est la différence entre ces scripts?Différence entre WITH NOCHECK CHECK CONSTRAINT et CHECK CONSTRAINT
ALTER TABLE Post_Send WITH NOCHECK CHECK CONSTRAINT [My_FOREIGN_KEY];
GO
ALTER TABLE Post_Send CHECK CONSTRAINT [My_FOREIGN_KEY];
GO
CHECK CONSTRAINT
permet une contrainte. (Oui, cela aurait dû être ENABLE
à la place.) WITH NOCHECK
le fait sans vérifier les données existantes. Ainsi, la syntaxe confuse WITH NOCHECK CHECK CONSTRAINT
active une contrainte sans vérifier les données existantes.
De the manual:
Indique si les données de la table est ou non validée par rapport un
FOREIGN KEY
ouCHECK
nouvellement ajoutés ou réactivées contrainte. Si ce n'est pas spécifié,WITH CHECK
est supposé pour les nouvelles contraintes, etWITH NOCHECK
est supposé pour les contraintes ré-activées.
Puisque vous réactivant une contrainte existante, WITH NOCHECK
est la valeur par défaut, et ces deux déclarations font exactement la même chose. WITH CHECK CHECK CONSTRAINT
réactiverait la contrainte tout en vérifiant également les données existantes pour les violations (et en marquant la clé étrangère comme fiable pour les optimisations dans le processus, ce qui ne se produit pas si vous passez outre la vérification).
dépend si table a déjà des données .. mais en ajoutant une clé étrangère et en le disant à NOCHECK est inutile et plutôt bête IMO –
Ils montrent le même effet. –