В обозревателе объектов в SQL Server при выборе и создании сценария ограничения внешнего ключа создается следующий код.
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
Какова цель последнего утверждения "ALTER TABLE CHECK CONSTRAINT"? Кажется, не имеет значения, запущен он или нет. Это не приводит к сбоям в существующих неверных данных и не меняет того, что ограничение будет применяться к новым данным.
Благодарность!
источник
Ваш первый оператор создает отключенное ограничение. Это должно быть включено и возможно доверять. Следующий странный синтаксис обеспечит включение и надежность вашего ограничения:
Уго Корнелис (Hugo Kornelis) написал очень хороший пост в блоге, который подробно объясняет это: можете ли вы доверять своим ограничениям?
источник