检查生成的脚本中的约束

时间:2012-08-07 20:18:43

标签: sql sql-server tsql ssms

在SSMS中,任务>生成脚本,我选择了几个表,并在生成的SQL中得到:

ALTER TABLE [Project]  WITH CHECK ADD  CONSTRAINT [FK_Project_aspnet_Users] FOREIGN KEY([UserId])
REFERENCES [aspnet_Users] ([UserId])
GO
ALTER TABLE [Project] CHECK CONSTRAINT [FK_Project_aspnet_Users]
GO

如果在第一个语句中指定了CHECK,为什么第二个语句中会WITH CHECK?第二个陈述直接出现在第一个陈述之后。

TIA

1 个答案:

答案 0 :(得分:3)

你认为这是多余的是正确的。

这就是SSMS生成脚本的方式。

请注意,脚本在生成后可以进行修改。可以将第一个语句更改为使用“WITH NO CHECK”,第二个语句不会多余。

第一个语句的目的是添加约束。

第二个陈述的目的是启用约束。

至少,这是我阅读脚本的方式。如果我一个接一个地手动运行语句,我可能会得到一个“约束已存在”异常,但可能没有启用该约束。

我仍然会运行第二个语句,以确保启用现有约束。