为什么SQL Server只为一个外键生成两个语句?

时间:2018-02-04 10:32:48

标签: sql-server

我正在使用SQL Server 2012。

我们说我有两张桌子:

  • Foo(Id int,BarId int)
  • Bar(id int,BarName varchar(50))

在数据库图表中,我创建了FooBar之间的关系并保存更改。

问题:当我编写创建的密钥脚本时,我发现生成了两个SQL语句:

ALTER TABLE [dbo].[Foo] WITH CHECK 
    ADD CONSTRAINT [FK_Foo_Bar] 
        FOREIGN KEY([BarId]) REFERENCES [dbo].[Bar] ([BarId])
GO

ALTER TABLE [dbo].[Foo] CHECK CONSTRAINT [FK_Foo_Bar]
GO

我想知道第二个陈述的必要性 - 第一个是不够的?

1 个答案:

答案 0 :(得分:0)

  

我想知道第二个陈述的必要性 - 不是第一个   足够?

你是对的,第一个足以启用外键约束。 在这种情况下,第二种陈述绝对是多余的。

SSMS可能正在使用一些通用模板来生成脚本。

我觉得这一代背后的主要原因是首先创建约束并单独启用它。