在生成的数据库模式脚本中包含 CHECK CONSTRAINT & GO 的目的是什么

问题描述 投票:0回答:2

我正在开发 SDL Server 2008 R2,我在其中生成了一个仅架构的数据库脚本。生成的脚本如下:

ALTER TABLE [dbo].[ConsoleServer]  WITH CHECK ADD  CONSTRAINT [FK_ConsoleServer_RackUnits] FOREIGN KEY([RackUnitID])
REFERENCES [dbo].[RackUnits] ([UnitID])
GO
ALTER TABLE [dbo].[ConsoleServer] CHECK CONSTRAINT [FK_ConsoleServer_RackUnits]

我有以下 2 个问题:-

  • 我知道第一行负责在两个数据库表之间创建FK。但以下的目的是什么:

    ALTER TABLE [dbo].[ConsoleServer] CHECK CONSTRAINT [FK_ConsoleServer_RackUnits]

  • 一般来说,为什么DB脚本有

    GO
    这个词。现在,如果我删除它,脚本将在目标数据库上很好地执行,那么为什么它会在任何语句之前包含在脚本中?

sql-server sql-server-2008 t-sql sql-server-2008-r2
2个回答
3
投票
  1. ALTER TABLE ... CHECK CONSTRAINT ...
    线启用约束。您可以添加约束并使其禁用(例如在清理数据时)。查看更多这里

  2. GO
    是批次分隔符,仅SSMS识别。某些语句(例如
    CREATE PROCEDURE...
    )要求它是批处理中的第一个语句。您可以将其输入到新文件中,或使用
    GO
    终止上一批。不过,请勿通过 OLEDB 或 ADO.NET 从您的应用程序发送
    GO


0
投票

根据与chatgpt 3.5的“相当一致”的聊天,当您创建一个新的fk时,它默认启用,因此以下检查约束是多余的(不必要),但我认为它是作为...形式包含的?协议?我不确定,只是猜测。

© www.soinside.com 2019 - 2024. All rights reserved.