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

yon*_*bat 20 t-sql

如果我使用外键编写表脚本,它看起来像这样:

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 KEYCHECK约束验证表中的数据.如果未指定,WITH CHECK则假定为新约束,并WITH NOCHECK假定为重新启用的约束.

和:

{ CHECK | NOCHECK } CONSTRAINT

指定启用或禁用constraint_name.

因此,一个选项是"检查表的当前内容",另一个选项是"在添加时验证新数据".