À partir de l'Explorateur d'objets dans SQL Server, lors de la sélection et du script d'une contrainte de clé étrangère, le code suivant est généré.
USE [MyTestDatabase]
GO
ALTER TABLE [dbo].[T2] WITH NOCHECK ADD CONSTRAINT [FK_T2_T1] FOREIGN KEY([T1ID])
REFERENCES [dbo].[T1] ([T1ID])
GO
ALTER TABLE [dbo].[T2] CHECK CONSTRAINT [FK_T2_T1]
GO
Quel est le but de la dernière instruction "ALTER TABLE CHECK CONSTRAINT"? Peu importe qu'il soit exécuté ou non. Il n'échoue pas sur les mauvaises données existantes, ni ne change que la contrainte sera appliquée sur les nouvelles données.
Merci!
la source
Votre première instruction crée une contrainte désactivée. Il doit être activé et éventuellement approuvé. La syntaxe étrange suivante s'assurera que votre contrainte est activée et approuvée:
Il y a un très bon article de blog par Hugo Kornelis qui l'explique en détail: pouvez-vous faire confiance à vos contraintes
la source