在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
答案 0 :(得分:3)
你认为这是多余的是正确的。
这就是SSMS生成脚本的方式。
请注意,脚本在生成后可以进行修改。可以将第一个语句更改为使用“WITH NO CHECK
”,第二个语句不会多余。
第一个语句的目的是添加约束。
第二个陈述的目的是启用约束。
至少,这是我阅读脚本的方式。如果我一个接一个地手动运行语句,我可能会得到一个“约束已存在”异常,但可能没有启用该约束。
我仍然会运行第二个语句,以确保启用现有约束。