Ограничение проверки внешнего ключа T-SQL
Когда вы создаете ограничение внешнего ключа в таблице и создаете script в MS SQL Management Studio, оно выглядит следующим образом.
ALTER TABLE T1 WITH CHECK ADD CONSTRAINT FK_T1 FOREIGN KEY(project_id)
REFERENCES T2 (project_id)
GO
ALTER TABLE T1 CHECK CONSTRAINT FK_T1
GO
Я не понимаю, какая цель имеет второй вариант с контрольным ограничением.
Не создает ли ограничение FK достаточно? Вам нужно добавить ограничение проверки, чтобы гарантировать целостность ссылки?
Другой вопрос: как он будет выглядеть тогда, когда вы напишете его прямо в определении столбца?
CREATE TABLE T1 (
my_column INT NOT NULL CONSTRAINT FK_T1 REFERENCES T2(my_column)
)
Разве этого недостаточно?
Ответы
Ответ 1
Сначала он создает ограничение, и здесь вы можете указать, нужно ли проверять данные allready в таблице или нет против вашего нового ограничения. WITH { CHECK | NOCHECK }
Вторая часть указывает, что ограничение включено. ALTER TABLE TableName { CHECK | NOCHECK } CONSTRAINT ConstraintName
Ответ 2
Второе утверждение вынуждено "WITH CHECK" в первом утверждении. Существует настройка, которую вы можете переключить, чтобы этого не делать.