生成的CHECK CONSTRAINT有什么用sql

What is the use of generated CHECK CONSTRAINT sql

SSMS 中,如果我打开一个带有约束的 table,右键单击其中一个 select“Script Constraint As”>“CREATE TO”,这些是自动生成:

ALTER TABLE [dbo].[table] DROP CONSTRAINT [CK_table_col]
GO

ALTER TABLE [dbo].[table] WITH CHECK ADD CONSTRAINT [CK_table_col] CHECK (([col] IN('SUP', 'ADM')))
GO

ALTER TABLE [dbo].[table] CHECK CONSTRAINT [CK_table_col]
GO

我明白前两行的作用,这不是问题。但是,最后的 CHECK CONSTRAINT 似乎不清楚。如果我删除它,它仍会检查现有记录是否与新约束匹配。如果我单独 运行 CHECK CONSTRAINT,它只是告诉我查询成功了……为什么需要它?它有什么作用?

可以使用 NOCHECK 禁用 CONSTRAINT。这不能在你 CREATE CONSTRAINT 时完成,但必须在之后明确地完成,例如:

ALTER TABLE dbo.MyTable NOCHECK CONSTRAINT chk_MyTable;

如果禁用约束然后使用 CREATE TO 脚本选项,那么也会反映出来。因此,SSMS 明确定义了约束是否在之后进行检查。尽管执行 CHECK 是多余的,但它会创建一致的脚本。