我正在使用SDL Server 2008 R2,其中我生成了一個僅模式數據庫腳本。生成的腳本如下:在生成的數據庫模式腳本中包含CHECK CONSTRAINT&GO的用途
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
。現在,如果我刪除它,腳本將在目標數據庫上執行得很好,那麼爲什麼它在任何語句之前包含在腳本中?
您的第一個問題是答案[here](http://stackoverflow.com/a/530303/2091410)。至於'GO',它的回答很好[這裏](http://stackoverflow.com/a/20711373/2091410)。 GO聲明不適用於您的情況。這只是SSMS在發出SQL命令時要格外小心的一個例子,因爲它不知道* next *命令是什麼。 –
@EdGibbs以及「ALTER TABLE [dbo]。[ConsoleServer] CHECK CONSTRAINT [FK_ConsoleServer_RackUnits]」?我是否需要它,因爲我在後面的表中創建一個約束檢查? –
我不認爲你會這樣做。如果約束最初被定義爲「WITH NOCHECK」,那麼它會有意義,但事實並非如此。我想另一個案例是SSMS過於謹慎。 –