我正在使用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]
我有这两个问题: -
我知道第一行负责在两个DB表之间创建一个FK。但以下的目的是什么:
ALTER TABLE [dbo].[ConsoleServer] CHECK CONSTRAINT [FK_ConsoleServer_RackUnits]
通常,为什么DB脚本有单词GO
。现在,如果我删除它,脚本将在目标数据库上很好地执行,那么为什么它在任何语句之前包含在脚本中?
答案 0 :(得分:3)
ALTER TABLE ... CHECK CONSTRAINT ...
行启用约束。您可以添加约束并将其禁用(例如,在清理数据时)。查看更多here
GO
是一个批处理分隔符,它只能被SSMS识别。某些语句(例如CREATE PROCEDURE...
)要求它是批处理中的第一个语句。您可以在新文件中键入它,或使用GO
终止上一批。不要通过OLEDB或ADO.NET从您的应用程序发送GO
。