【发布时间】:2017-10-25 17:19:49
【问题描述】:
我正在尝试为多个插入创建事务,如果一个失败,我希望全部回滚。根据我发现的例子,我有这个
BEGIN TRY
BEGIN TRAN
INSERT1
INSERT2
INSERT3
INSERT4
COMMIT TRAN
END TRY
BEGIN CATCH
IF (@@TRANCOUNT > 0)
BEGIN
ROLLBACK TRANSACTION;
END;
INSERT INTO Errors (errornumber, errorseverity, errorstate, errorprocedure, errorline, errormessage)
VALUES (ERROR_NUMBER(), ERROR_SEVERITY(), ERROR_STATE(), ERROR_PROCEDURE(), ERROR_LINE(), ERROR_MESSAGE())
END CATCH
在我的示例中,INSERT4 失败。其他插入似乎正确回滚,但我收到此错误
EXECUTE 之后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配。先前计数 = 0,当前计数 = 1。
语法正确吗?我见过其他测试 IF (XACT_STATE()) = -1 而不是 @@TRANCOUNT > 0
的示例【问题讨论】:
-
你有存储过程的事务?
-
试着把
INSERT INTO Errors放在ROLLBACK TRANSACTION之后
标签: sql-server