Ограничение проверки внешнего ключа T-SQL - PullRequest
18 голосов
/ 28 мая 2010

Когда вы создаете ограничение внешнего ключа в таблице и создаете сценарий в 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)
)

Разве этого не достаточно?

Ответы [ 2 ]

8 голосов
/ 28 мая 2010

Сначала создается ограничение, и здесь вы можете указать, должны ли данные, уже находящиеся в таблице, проверяться или нет в соответствии с вашим новым ограничением. WITH { CHECK | NOCHECK }

Вторая часть указывает, что ограничение включено. ALTER TABLE TableName { CHECK | NOCHECK } CONSTRAINT ConstraintName

3 голосов
/ 28 мая 2010

Второе утверждение сопровождается знаком «С ПРОВЕРКОЙ» в первом утверждении. Есть настройка, которую вы можете переключить, чтобы не делать этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...