Aus dem Objekt-Explorer in SQL Server wird beim Auswählen und Skripten einer Fremdschlüsseleinschränkung 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 Anweisung "ALTER TABLE CHECK CONSTRAINT"? Es scheint egal zu sein, ob es ausgeführt wird oder nicht. Es schlägt weder bei vorhandenen fehlerhaften Daten fehl, noch ändert es etwas daran, dass die Einschränkung für neue Daten erzwungen wird.
Vielen Dank!
quelle
Ihre erste Anweisung erstellt eine deaktivierte Einschränkung. Es muss aktiviert und möglicherweise vertrauenswürdig sein. Die folgende ungewöhnliche Syntax stellt sicher, dass Ihre Einschränkung aktiviert und vertrauenswürdig ist:
Es gibt einen sehr guten Blogbeitrag von Hugo Kornelis, der es ausführlich erklärt: Können Sie Ihren Zwängen vertrauen?
quelle