2012-10-17 72 views
-1
SET XACT_ABORT ON 

BEGIN TRY 
    BEGIN TRAN  

    INSERT INTO dbo.Student 
    (FirstName, LastName) 
    VALUES 
    ('Jon','Ye') 

    IF XACT_STATE() = 0 
    COMMIT TRAN 

END TRY 
BEGIN CATCH 

    IF XACT_STATE() <> 1 
    ROLLBACK TRAN 
    ELSE 
    COMMIT TRANSACTION 

END CATCH 

RETURN 
GO 

錯誤消息:有未提交的事務

有未提交的事務。

我只在關閉SQL Server時看到結果。

回答

1

的問題是在這裏

IF XACT_STATE() = 0 
     COMMIT TRAN 

XACT_STATE()如果沒有活動的用戶事務只存在返回0。由於BEGIN TRAN啓動的開放事務,XACT_STATE必須返回1,因此COMMIT TRAN不會執行。您應該檢查返回值1