使用CHECK添加FK约束(SQL Server)

时间:2014-11-24 09:59:26

标签: sql sql-server tsql

我正在查看运行以下语句,该语句将创建一个FK约束。

ALTER TABLE Table2 WITH CHECK ADD 
CONSTRAINT FK_Table2_Table1 FOREIGN KEY (SID) REFERENCES Table1 (SID);

(1)我的问题是:WITH CHECK代表什么? 我无法在MSDN官方网站上轻松找到答案。

(2)你能指点我一些官方文件吗? (在WITH CHECK和其他选项上 在添加FK约束时可用)?

2 个答案:

答案 0 :(得分:4)

你可以在这里找到答案:http://technet.microsoft.com/en-us/library/ms190273(v=sql.105).aspx

WITH CHECK |没有检查

  

指定是否针对新添加或重新启用的FOREIGN KEY或CHECK约束验证表中的数据。如果未指定,则假定对于新约束使用WITH CHECK,并且对于重新启用的约束假定使用WITH NOCHECK。

     

如果您不想针对现有数据验证新的CHECK或FOREIGN KEY约束,请使用WITH NOCHECK。除极少数情况外,我们不建议这样做。将在所有后续数据更新中评估新约束。添加约束时由WITH NOCHECK抑制的任何约束违规可能会导致将来更新失败,如果他们使用不符合约束的数据更新行。

     

查询优化器不考虑使用NOCHECK定义的约束。在使用ALTER TABLE WITH CHECK CHECK CONSTRAINT ALL重新启用它们之前,将忽略此类约束。

答案 1 :(得分:1)

WITH CHECK | WITH NOCHECK指定是否针对新添加或重新启用的FOREIGN KEY或CHECK约束验证表中的数据。如果未指定,则假定WITH CHECK为new 对于重新启用的约束,假设为WITH NOCHECK。

参考链接:http://msdn.microsoft.com/en-us/library/ms190273.aspx