生成的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
是多余的,但它会创建一致的脚本。
在 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
是多余的,但它会创建一致的脚本。