SQL Server中的存儲過程中的;
和GO
有什麼區別?有什麼區別;並在存儲過程中在SQL Server中?
實際上,如果我在SQL服務器中有一個存儲過程,並想在它內部放置單獨的查詢,第一個只計算記錄數(count),第二個根據某些條件選擇一些記錄,那麼是什麼我應該在兩個查詢之間使用嗎?
Go
或;
SQL Server中的存儲過程中的;
和GO
有什麼區別?有什麼區別;並在存儲過程中在SQL Server中?
實際上,如果我在SQL服務器中有一個存儲過程,並想在它內部放置單獨的查詢,第一個只計算記錄數(count),第二個根據某些條件選擇一些記錄,那麼是什麼我應該在兩個查詢之間使用嗎?
Go
或;
;只是結束聲明。
GO不是一條語句,而是一條命令到服務器將當前批次提交到數據庫。它在交易中創建一個止損點。
http://msdn.microsoft.com/en-us/library/ms188037.aspx
(更新,感謝您的意見): GO是用於管理工作室,據我知道,也許其他工具以及
分號分隔查詢,該聲明GO命令分離批次。 (GO也不是T-SQL命令,它是由sqlcmd和osql實用程序和Management Studio識別的命令。)
您不能在存儲過程中使用GO。如果你想嘗試,程序的定義將在那裏結束,其餘的將是一個單獨的批次。
局部變量有該批次的範圍,所以GO命令後,您不能使用GO命令之前聲明的局部變量:
declare @test int
set @test = 42
GO
select @Test -- causes an error message as @Test is undefined
GO是不是服務器的命令時,它的MS提供的大多數客戶端工具的默認批量分隔符。當客戶端工具本身在新行上遇到「GO」時,它會將迄今積累的所有命令發送到服務器,然後重新開始。
這意味着在一批中聲明的任何變量在後續批次中都不可用。而且這也意味着多行註釋不能放在「GO」命令周圍 - 因爲服務器會看到第一批,並看到一條未終止的評論。
它標記查詢分析器中批處理的結束,因此表示該批處理中存儲過程定義的結束。 儘管我知道它不是sp的一部分。 GO不是TSQL命令。
而且;只是結束聲明。
其實,在「管理工作室」之外去冗餘。我不會(-1)。 – 2010-02-22 11:16:37
@Hassan Syed:是的,你是對的 – Faruz 2010-02-22 11:17:50
嘗試通過SqlCommand執行一個帶有'GO'的語句,它會拋出一個異常。 – cjk 2010-02-22 11:20:15