启用约束的SQL语法不同(SQL Server)

启用约束的SQL语法不同(SQL Server),sql,sql-server,tsql,Sql,Sql Server,Tsql,下面这两种说法有什么不同吗 ALTER TABLE [table_name] CHECK CONSTRAINT [constraint_name] 及 发件人: 有支票|无支票: 指定是否根据新添加或重新启用的外键或检查约束验证表中的数据。如果未指定,则假定为带检查 因此,由于默认情况下是“WITH CHECK”,因此没有任何区别。WITH CHECK子句将检查任何现有数据,如果存在不满足约束的数据,则将失败。如果没有WITH CHECK子句,约束将仅应用于添加到表中的新数据 如果表中没有数据

下面这两种说法有什么不同吗

ALTER TABLE [table_name] CHECK CONSTRAINT [constraint_name]

发件人:

有支票|无支票:

指定是否根据新添加或重新启用的外键或检查约束验证表中的数据。如果未指定,则假定为带检查


因此,由于默认情况下是“WITH CHECK”,因此没有任何区别。

WITH CHECK子句将检查任何现有数据,如果存在不满足约束的数据,则将失败。如果没有WITH CHECK子句,约束将仅应用于添加到表中的新数据

如果表中没有数据,那么这些语句在功能上是等价的

下面是有关ALTER TABLE命令的文档:

这是一个相当长的页面,所以我将引用它:

有支票|无支票
指定是否根据新添加或重新启用的数据验证表中的数据
外键或检查约束。如果未指定,则假定对新约束进行检查,
对于重新启用的约束,假设使用NOCHECK

它接着给出了以下建议:

如果不希望根据现有数据验证新的检查约束或外键约束,请使用 没问题。我们不建议这样做,除非在极少数情况下。新的约束将是 在所有后续数据更新中进行评估。通过WITH NOCHECK抑制的任何约束冲突 添加约束时,如果将来更新行时使用的数据不正确,则可能会导致更新失败 不符合约束


请提供您所声称内容的参考资料,例如文档页面的链接。我为自己制作了一个POC,并意识到行为符合此答案,尽管没有文档页面的链接。我发布了一个指向正确文档的链接,并引用了相关部分。1000对没有提供最初的参考表示歉意。这是我对这个网站的第一次贡献。不过我知道需要一个来源。谢谢你的快速回复。考虑到我正在为某个表添加一个全新的约束,您的陈述是正确的。但是,如果该约束已经存在,则预期行为与@dex star在下面发布的相同。
ALTER TABLE [table_name] WITH CHECK CHECK CONSTRAINT [constraint_name]