Подтвердить что ты не робот

ALTER TABLE [dbo]. [MyTable] CHECK CONSTRAINT [FK_MyTable_SomeCol]

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

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])?

4b9b3361

Ответ 1

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

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

WITH CHECK | WITH NOCHECK

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

и

{ CHECK | NOCHECK } CONSTRAINT

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

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