就是愛分享
在存取資料庫時,我們所下的SQL敘述不一定要一個一個地執行,也可以利用批次(Batch)的方式,將一個或多個SQL敘述打包,一起送到SQL Server去處理。SQL Server會將一個批次中所包含的數個SQL敘述當做一個執行單元(Unit),一起編譯成為執行計畫(Execution plan),然後再加以執行。

不過請注意,並非所有SQL敘述皆可放在同一個批次內執行,例如CREATE VIEW、CREATE DEFAULT、CREATE RULE、CREATE PROCESURE及CREATE TRIGGER敘述只能單獨放在一個批次中執行,不能與其他敘述合併執行。

用GO分隔不同的批次

因為不是所有SQL敘述都可以放再同一個批次,或是有些情況下,您可以會希望讓某些敘述分開執行。假設您有三個敘述需要執行,如果三個敘述全部放再同一批次,則當第1個敘述失敗時,批次就會停止,而不會繼續執行第2、3個敘述,若是能夠將第1與第2、3個敘述隔開,就可以確保後面敘述可以順利執行。

所以SQL Server提供了一個GO指令,讓您可以隔開SQL敘述,將之分為多個批次。下面是一個簡單的範例:

USE 練習02 <-------第1個批次
GO
SELECT * -----
FROM 客戶 |
SELECT * |---第2個批次
FROM 訂單 ----|
GO

當SQL Server遇到GO指令時,會將GO當作傳送批次的訊號,例如遇到第1個GO的時候,會將GO前面的敘述傳送給伺服器進行處理(編譯成執行計劃並加以執行)。而遇到第2個GO指令時,再將兩個SELECT敘述傳送給伺服器處理,如此就產生兩個批次。

請注意,GO只有SQL Server Management Studio提供的工具程式才能辦識並處理。意即GO指令只能使用在SQL Server Management Studio中執行,若是您撰寫應用程式(例如用Visual Basic撰寫)時使用GO指令,那麼SQL Server將會因不認得而產生錯誤訊息。
0 Responses