SQL NO CHECK FOREIGN KEY après datatables, réactivant l'optimiseur de requête

J'ai une database SQL Server 2012 avec une contrainte de key étrangère qui fait reference à Counsortinges.CountryID = States.CountryID

J'avais besoin de recréer la table des Counsortinges pour que je renonce à cette key étrangère depuis la table des States (sinon cela ne me permettrait pas d'abandonner les pays)

Après avoir fait cela, je veux recréer le FK sur les States mais il ne me le permet pas à less que je ne spécifie NO CHECK comme tel:

 ALTER TABLE States WITH NOCHECK ADD CONSTRAINT FK_StatesCounsortinges FOREIGN KEY (CountryID) REFERENCES Counsortinges(CountryID) GO 

Au début, je n'avais pas réalisé que certaines des rangées d'États avaient un CountryID qui n'avait pas de CountryID Counsortinges.CountryID correspondant. De toute évidence WITH NOCHECK m'a permis de procéder sans erreur.

Maintenant SQLServer avec marquer ce FK comme "non approuvé", MSDN dit de réactiver l'optimiseur de requête en vérifiant toutes les contraintes. Alors pourquoi est-ce que la ligne suivante ne me donne pas une erreur même si certains Etats ont un CountryID invalide?

  ALTER TABLE States CHECK CONSTRAINT ALL GO 

Je pense que cela aurait dû soulever une erreur.

Pour rétablir la confiance des contraintes, vous devez utiliser cette syntaxe, qui semble être un peu étrange. Le WITH CHECK est ce qui provoque la validation des données existantes.

  ALTER TABLE States WITH CHECK CHECK CONSTRAINT ALL GO 

Comme précédemment, cela génère une erreur jusqu'à ce que vous résolviez les états avec de mauvaises valeurs CountryID.