2014-04-13 93 views
0

我嘗試使用事務從我的表中刪除幾行。我使用三次命令刪除,其中兩個都可以,第三個包含錯誤。我想創建保存點並確認丟棄2個對象。但是我得到一個錯誤:當前事務不能被提交併且不能被回滾到一個保存點。回滾整個交易。這裏是我的代碼:SQL。無法回滾事務

BEGIN TRANSACTION 
BEGIN TRY 
DELETE FROM employee 
WHERE ID = 101; --OK 

DELETE FROM employee 
WHERE Name = 'James'; --OK 

SAVE TRANSACTION point_1; 

DELETE FROM employee 
WHERE ID = '11a'; --letters are not allowed 
COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 
    ROLLBACK TRANSACTION point_1 
    PRINT 'Error! Not all employees were deleted from database.' 
END CATCH 

任何人都可以幫我嗎?非常感謝你!

我試着這樣說:

BEGIN TRANSACTION 
DELETE FROM employee 
WHERE ID = 101; 

DELETE FROM employee 
WHERE Name = 'James'; 

SAVE TRANSACTION point_1; 

BEGIN TRY 
DELETE FROM employee 
WHERE ID = '11a'; 
END TRY 
BEGIN CATCH 
    if XACT_STATE() = -1 
     ROLLBACK TRANSACTION 
    if XACT_STATE() = 1 and @@TRANCOUNT = 0 
     ROLLBACK TRANSACTION 
    if XACT_STATE() = 1 and @@TRANCOUNT > 0 
     ROLLBACK TRANSACTION point_1 
PRINT 'Error! Not all employees were deleted from database.' 
END CATCH 

有沒有錯誤,這一次,但前兩個對象不會被刪除。我的錯誤在哪裏?謝謝!

+0

可能重複的[SQL事務錯誤:當前事務不能提交,並且不能支持寫入日誌文件的操作](http://stackoverflow.com/questions/7488149/sql-transaction-error-the-current -transaction-can-be-committed-and-can-su) –

+0

我的查詢是通過不可提交的狀態。我怎樣才能返回到我的保存點? – user3443227

回答

0

您可能在會話上有SET XACT_ABORT ON。如果您的代碼位於觸發器內,則默認情況下此設置爲ON。

SET XACT_ABORT OFF試試看你的代碼。

+0

我試圖關閉它,但它沒有幫助 – user3443227