SQL Server Go 語句
Go是SYBASE和SQL Server中用來表示事物結束,提交併確認結果,相當於ORACLE的Commit。
SQL Server 實用工具將 GO 解釋爲應將當前的 Transact-SQL 批處理語句發送給 SQL Server 的信號。當前批處理語句是自上一 GO 命令後輸入的所有語句,若是第一條 GO 命令,則是從特殊會話或腳本的開始處到這條 GO 命令之間的所有語句。
局部(用戶定義)變量的作用域限制在一個批處理中,不可在 GO 命令後引用。
1. GO代表一個批處理的結束;
2. 你可以把每個GO之間的語句當成是一句SQL;
3. GO不是標準的語法,只是查詢分析器爲了區分多個批處理而設的分隔符而已;
具體的如下:
CREATE TABLE TableName
(
ColumnName1 DataType,
ColumnName2 DataType
)
GO
INSERT INTO TableName(ColumnName1,ColumnName2)
VALUES (Value1,Value2)
GO
在解析和執行的時候這一篇T-SQL腳本其實是被認爲是兩個獨立的部分,只不過他們使用同一個Session
舉一個最有說服力的例子。
DECLARE @Parameter1 INT
DECLARE @Parameter2 INT
-- If insert "GO" to there...
-- "GO"
-- Result:
-- Msg 137, Level 15, State 1, Line 1
-- Must declare the scalar variable "@Parameter1".
-- Msg 137, Level 15, State 1, Line 2
-- Must declare the scalar variable "@Parameter2".
-- Msg 137, Level 15, State 2, Line 4
-- Must declare the scalar variable "@Parameter1".
SET @Parameter1 = 1
SET @Parameter2 = 2
PRINT @Parameter1 + @Parameter2
GO
-- Result: 3
當你在使用的變量以前插入了一個GO,這個GO之前腳本會作爲一個提交部分,而這個GO以後的部分會作爲第二個部分進行提交。
P.S. 這裏說的提交僅是提交SQL代碼,不會提交"GO"這個關鍵字
我們還需要留意以下特殊注意事項:
1. 與GO同一行,GO前邊不能包含任何SQL
2. 與GO同一行,GO後邊可以跟 – 註釋,但是不能跟 /**/ 註釋!
這個問題情況大家都不會這樣寫,所以遇到的機率很小,但是有一個原因引發第1個問題的情況值得大家注意。SQL腳本的文本格式,最好編碼完成後檢查一下文本格式選擇UTF,否則可能你看到自己是換行了,但是在SQL解析的時候會認爲他們在同一行,這樣的情況當你越檢查越會覺得SQL寫得很對,但是…但是它始終告訴你語法錯誤。一定小心!
再說一個GO的特性,但是大家都不常用,或者說我們由於GO太常見而忽略掉了它的這個重要的特性,就是 GO是可以代替我們做重複操作的!!
INSERT TABLE TableName(Column1, Column2)
VALUES (Value1, Value2)
GO [Number] 這裏的Number必須是正整數!
INSERT TABLE TableName(Column1, Column2)
VALUES (Value1, Value2)
GO 100
在這裏我們會看到GO加了100次重複操作,
同時在SSMS窗口智能感知的時候會用紅線告訴我們語法不對
但是請放心執行,他100%能通過,同時必定爲你運行100次
如果您喜歡這篇文章請在下面點個贊和收藏。謝謝您的支持!