SQL Server Go 語句的理解

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次

如果您喜歡這篇文章請在下面點個贊和收藏。謝謝您的支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章