2

在 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

4

1 回答 1

3

您正确地观察到它是多余的。

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

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

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

第二条语句的目的是启用约束。

至少,这是我阅读剧本的方式。如果我一一手动运行语句,我可能会收到“约束已存在”异常,但该约束可能未启用。

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

于 2012-08-07T20:34:47.083 回答