ALTER TABLE [dbo]. [MyTable] CHECK CONSTRAINT [FK_MyTable_SomeCol] - PullRequest
20 голосов
/ 02 апреля 2012

Если я запишу таблицу с внешним ключом, она будет выглядеть так:

GO
ALTER TABLE [dbo].[MyTable]  WITH CHECK ADD  CONSTRAINT [FK_MyTable_SomeCol] FOREIGN KEY([SomeCol])
REFERENCES [dbo].[MyOtherTable] ([SomeCol])
GO
ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_SomeCol]
GO

Для чего нужна вторая часть (ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_SomeCol])?

Ответы [ 2 ]

19 голосов
/ 02 апреля 2012

Это артефакт способа, которым ограничение написано в сценарии - хотя указывать эти параметры необязательно (поскольку они являются значениями по умолчанию для новых ограничений), тот же генератор может также генерировать параметры NOCHECK точно таким же образом.

Документация для ALTER TABLE указывает на два различных использования CHECK / NOCHECK:

WITH CHECK | WITH NOCHECK

Указывает, используется лиданные в таблице проверяются или не проверяются на соответствие вновь добавленным или повторно включенным ограничениям FOREIGN KEY или CHECK.Если не указано, WITH CHECK предполагается для новых ограничений, а WITH NOCHECK предполагается для вновь включенных ограничений.

И:

{ CHECK | NOCHECK } CONSTRAINT

Указывает, что имя-ограничения включено или отключено.

Таким образом, одна опция говорит «проверить текущее содержимое таблицы», другая - «Проверить новые данные по мере их добавления».

0 голосов
/ 02 апреля 2012

Это способ реализации ссылочной целостности для ваших таблиц.

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