it-swarm.com.de

ALTER TABLE CHECK CONSTRAINT

Wenn Sie im Objekt-Explorer in SQL Server eine Fremdschlüsseleinschränkung auswählen und Skripte erstellen, wird der folgende Code generiert.

     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

Was ist der Zweck der letzten Aussage "ALTER TABLE CHECK CONSTRAINT"? Es scheint keine Rolle zu spielen, ob es ausgeführt wird oder nicht. Es schlägt weder bei vorhandenen fehlerhaften Daten fehl, noch ändert es, dass die Einschränkung für neue Daten erzwungen wird.

Vielen Dank!

25
Delux

Es stellt sicher, dass die Einschränkung nach ihrer Erstellung aktiviert wird. Ihre ALTER TABLE - Anweisung enthält WITH NOCHECK, Das besagt, dass beim Erstellen der Einschränkung nicht nach vorhandenen fehlerhaften Daten gesucht werden soll.

Wie geschrieben, werden die vorhandenen Daten aufgrund des WITH NOCHECK In der ersten Anweisung nicht gegen die Einschränkung geprüft. Durch die Ausgabe der zweiten Anweisung wird die Überprüfung auf die Einschränkung für zukünftige Änderungen an der Tabelle ermöglicht, die von der Einschränkung abgedeckt werden, bis ein ALTER TABLE [dbo].[T2] NOCHECK CONSTRAINT [FK_T2_T1] Ausgegeben wird.

In den Anweisungen heißt es im Wesentlichen: "Erstellen Sie diese Fremdschlüsseleinschränkung, aber vergleichen Sie sie nicht mit vorhandenen Daten. Aktivieren Sie sie für bevorstehende Änderungen an den Daten."

23
squillman

Ihre erste Anweisung erstellt eine deaktivierte Einschränkung. Es muss aktiviert und möglicherweise vertrauenswürdig sein. Die folgende seltsame Syntax stellt sicher, dass Ihre Einschränkung aktiviert und vertrauenswürdig ist:

ALTER TABLE YourTable
      WITH CHECK CHECK CONSTRAINT YourConstraint;

Es gibt einen sehr guten Blog-Beitrag von Hugo Kornelis, der ihn ausführlich erklärt: Kannst du deinen Einschränkungen vertrauen

7
A-K