2012-05-02 83 views
1

我的測試表有兩列:無法在Sql Server 2008R2中ROLLBACK事務?

id   int not null 
somecolumn varchar(10)) 

現在看到我的查詢:

USE TRY 
BEGIN TRANSACTION T1 
INSERT INTO Test VALUES(7,'hi'); 
GO 
INSERT INTO Test VALUES(8,'hi','ABC'); 
GO 
PRINT @@ERROR 
if @@ERROR>0 
    ROLLBACK TRANSACTION T1 
ELSE 
    COMMIT TRANSACTION T1 

我知道,我的第二個查詢是錯誤的,所以我想事務回滾,但它插入第一個查詢,則顯示此消息:

(1 row(s) affected) 
Msg 213, Level 16, State 1, Line 1 
Column name or number of supplied values does not match table definition. 
213 
+0

如果您刪除了「GO」,會發生同樣的情況嗎? – xan

+0

您無法在BEGIN和END之間使用GO關鍵字。 [http://stackoverflow.com/questions/1180279/when-do-i-need-to-use-begin-end-blocks-and-the-go-keyword-in-sql-server] [ 1] [1]:http://stackoverflow.com/questions/1180279/when-do-i-need-to-use-begin-end-blocks-and-the-go-keyword-在-SQL服務器 – 2012-07-03 22:40:46

回答

0

正如Benedikt所述,我們不能在BEGIN和END之間使用GO。如果從上述事務中刪除GO,則由於寫入錯誤的插入語句,即使編譯語句也會失敗。 TRY..CATCH也不起作用(如果在執行階段嘗試捕獲錯誤並回滾事務)。