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时才会看到结果。
答案 0 :(得分:1)
问题出在这里
IF XACT_STATE() = 0
COMMIT TRAN
如果不存在活动用户事务,则XACT_STATE()仅返回0。由于BEGIN TRAN启动的开放事务,XACT_STATE必须返回1,因此COMMIT TRAN不会执行。您应该检查返回值为1