如果我使用外键编写表脚本,它看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
(ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_SomeCol])的第二部分是什么?
Dam*_*ver 20
这是约束编写方式的工件 - 尽管没有必要指定这些选项(因为它们是新约束的默认值),同一个生成器也可以NOCHECK以完全相同的方式生成选项.
文档用于ALTER TABLE指示两个不同的用途CHECK/ NOCHECK:
WITH CHECK | WITH NOCHECK指定是否针对新添加或重新启用
FOREIGN KEY或CHECK约束验证表中的数据.如果未指定,WITH CHECK则假定为新约束,并WITH NOCHECK假定为重新启用的约束.
和:
{ CHECK | NOCHECK } CONSTRAINT指定启用或禁用constraint_name.
因此,一个选项是"检查表的当前内容",另一个选项是"在添加时验证新数据".