2012-10-17 145 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