我正在开发 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
这个词。现在,如果我删除它,脚本将在目标数据库上很好地执行,那么为什么它会在任何语句之前包含在脚本中?ALTER TABLE ... CHECK CONSTRAINT ...
线启用约束。您可以添加约束并使其禁用(例如在清理数据时)。查看更多这里GO
是批次分隔符,仅SSMS识别。某些语句(例如 CREATE PROCEDURE...
)要求它是批处理中的第一个语句。您可以将其输入到新文件中,或使用 GO
终止上一批。不过,请勿通过 OLEDB 或 ADO.NET 从您的应用程序发送 GO
。根据与chatgpt 3.5的“相当一致”的聊天,当您创建一个新的fk时,它默认启用,因此以下检查约束是多余的(不必要),但我认为它是作为...形式包含的?协议?我不确定,只是猜测。