在SET IDENTITY_INSERT開啓/關閉之前和之後,是否需要GO?在SET IDENTITY_INSERT開啓/關閉之前和之後是否需要GO
我看到很多樣品,文章使用這個,但是當我跳過去時,腳本工作正常。
GO
SET IDENTITY_INSERT [PropertyValue] ON
GO
-- Some script
GO
SET IDENTITY_INSERT [PropertyValue] OFF
GO
我不知道這是否是一個很好的代碼轉換。
在SET IDENTITY_INSERT開啓/關閉之前和之後,是否需要GO?在SET IDENTITY_INSERT開啓/關閉之前和之後是否需要GO
我看到很多樣品,文章使用這個,但是當我跳過去時,腳本工作正常。
GO
SET IDENTITY_INSERT [PropertyValue] ON
GO
-- Some script
GO
SET IDENTITY_INSERT [PropertyValue] OFF
GO
我不知道這是否是一個很好的代碼轉換。
你不需要。 GO
指示例如。 SQL Server Management Studio將執行查詢作爲單獨的命令。有些條款需要這個,有些則不需要。
例如,通常需要使用GO
將CREATE TABLE
子句從INSERT
s分隔到同一個表中。
編輯:似乎不再是這種情況,正如Damien指出的那樣。 CREATE TABLE
後面跟着INSERT
就好了,同樣適用於DROP TABLE
等。總是在改進,呃? :)我已經嘗試了一些我記得的其他案例,看起來你不再需要在命令中使用CREATE PROCEDURE
作爲最後一條語句。時代改變:)
set identity_insert
不需要被GO
分開。當你自動生成SQL代碼時,它通常用作安全實踐,因爲你不一定知道其他地方發生了什麼(例如,你可能在前面的子句中創建了表,所以可以肯定的是,你把GO
在身份插入之前)。但是這並不是必要的,如果你用手寫的SQL作爲一個批處理執行,它不會產生任何特定的好處。
GO
不是Transact-SQL語句;它是由sqlcmd
和osql
實用程序和SQL Server Management Studio代碼編輯器識別的命令。 SQL Server實用程序將GO
解釋爲應將當前批次的Transact-SQL語句發送到SQL Server實例的信號。當前批次報表包含自上次GO
以來輸入的所有報表,或自特設會話或腳本開始以來輸入的所有報表,如果這是第一個GO
。 Transact-SQL語句不能佔用與GO
命令相同的行。但是,該行可以包含註釋。 用戶必須遵守批次規則。例如,批次中的第一條語句之後的任何存儲過程的執行都必須包含EXECUTE
關鍵字。本地(用戶定義的)變量的範圍限於批處理,並且在命令GO
後不能被引用。
當您從官方文檔複製並粘貼您的回覆時,您應該引用來源:https://msdn.microsoft.com/en-us/library/ms188037.aspx – Quercus
我不同意你選擇的例子。 '創建表T(ID int not null);插入到T(ID)值(1)中;'(甚至全部在一行上)運行良好。 –
@Damien_The_Unbeliever:哈,你說得對。時代在變。我記得過去一段時間(MS SQL 2000?)是不可能的,因爲它不能創建查詢計劃,因爲表不存在。看來這個特殊限制現在已經消失了。這是非常有用的,謝謝:) – Luaan
謝謝,我覺得GO是煩人的。我不需要這個。 –