我想深究其中,因爲它讓我感到困惑。任何人都可以解釋什麼時候我應該在我的腳本中使用GO語句?與GO聲明混淆,未提交的交易和更改過程
據我所知,GO語句不是T-SQL語言的一部分,而是用來發送一批語句到SQL服務器進行處理。
當我在查詢分析器中運行下面的腳本它看起來運行良好。然後關閉窗口並顯示警告:
「有未提交的事務,您希望在關閉窗口之前提交這些事務嗎?」
BEGIN TRANSACTION;
GO
ALTER PROCEDURE [dbo].[pvd_sp_job_xxx]
@jobNum varchar(255)
AS
BEGIN
SET NOCOUNT ON;
UPDATE tbl_ho_job SET delete='Y' WHERE job = @job;
END
COMMIT TRANSACTION;
GO
但是,如果我在ALTER語句的末尾添加一個GO,那麼它就可以(如下所示)。怎麼來的?
BEGIN TRANSACTION;
GO
ALTER PROCEDURE [dbo].[pvd_sp_xxx]
@jobNum varchar(255)
AS
BEGIN
SET NOCOUNT ON;
UPDATE tbl_ho_job SET delete='Y' WHERE job = @job;
END
GO
COMMIT TRANSACTION;
GO
我想過移除所有的GO的,但隨後抱怨說,ALTER PROCEDURE語句必須是查詢批處理中的第一條語句?這只是我必須堅持的要求嗎?
它似乎很奇怪,因爲如果我BEGIN TRANSACTION和GO ....該語句被髮送到服務器進行處理,我開始一個事務。
接下來是ALTER過程,一個COMMIT TRANSACTION和一個GO(因此將這些語句發送到服務器進行處理,提交以完成之前啓動的事務),當我關閉窗口時仍然抱怨?當然,我確信alter procedure statement是批處理中的第一個。它如何抱怨未提交的交易。
任何幫助將不勝感激!
感謝,似乎有道理。 – bobbo 2011-06-10 15:08:09
第一條語句BEGIN TRANSACTION之後的GO也顯得多餘。 – bobbo 2011-06-10 15:08:59
另外,正如你所提到的那樣,BEGIN和END並沒有在存儲過程中定義範圍,這個批處理就是這樣。所以我肯定需要在CREATE PROCEDURE結束時使用GO。那麼,BEGIN和END有什麼意義呢? – bobbo 2011-06-10 15:10:28