1. 程式人生 > >SQL Server Go 語句

SQL Server Go 語句

go 是SYBASE和SQL Server中用來表示事物結束,提交併確認結果,相當於ORACLE的Commit

SQL Server 實用工具將 GO 解釋為應將當前的 Transact-SQL 批處理語句傳送給 SQL Server 的訊號。當前批處理語句是自上一 GO 命令後輸入的所有語句,若是第一條 GO 命令,則是從特殊會話或指令碼的開始處到這條 GO 命令之間的所有語句。
區域性(使用者定義)變數的作用域限制在一個批處理中,不可在 GO 命令後引用。

GO代表一個批處理的結束;
你可以把每個GO之間的語句當成是一句SQL;
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次