sql-server - 如果事务 2 中出现一些错误,会发生什么?exec 是否会停止并回滚所有 trans 并且不会 exec 事务 3
问题描述
就我而言,我想停止对所有其他嵌套事务的任何进一步执行。如果 tran1 或 tran 2 执行中出现错误,应停止并抛出错误,回滚之前所做的所有更改。
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION 1
Insert into Table1 Values (.....)
Delete from Table2
--
--other example code
--
COMMIT TRANSACTION 1
BEGIN TRANSACTION 2
ALTER TABLE [dbo].[Table1] NOCHECK CONSTRAINT [FK_Table2]
WHILE 1=1
BEGIN
WAITFOR DELAY '00:00:01'
DELETE TOP (1000) ufb
FROM Table1 ufb
INNER JOIN Table2 mbss on mbss.ID=ufb.ID
--
IF @@ROWCOUNT < 1 BREAK
END
--other example code
COMMIT TRANSACTION 2
BEGIN TRANSACTION 3
--Some insert code
--other example code
COMMIT TRANSACTION 3
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN
DECLARE @ErrorMessage NVARCHAR(4000) = ERROR_MESSAGE()
DECLARE @ErrorSeverity INT = ERROR_SEVERITY()
DECLARE @ErrorState INT = ERROR_STATE()
RAISERROR (@ErrorMessage,
@ErrorSeverity,
@ErrorState
);
END CATCH
解决方案
推荐阅读
- javascript - Google reCaptcha 响应“未捕获(承诺)为空”
- asynchronous - 不幸的是,xamarin 应用程序已停止选择菜单项
- angular - 带有 [(ngModel)] 的硬编码字符串
- reactjs - 为什么我必须对 React 中的图像使用“require”而不是“import from”?
- mysql - 测试 AWS Lambda 函数
- html - 预期 RBRACE,但括号在那里?
- python - 如何在不使它们不可变的情况下使 python 数据类可散列?
- ejabberd - 每当我尝试配置房间时,converse.js 都会断开连接。为什么?
- java - 在 Android Java 中自定义 Json
- arrays - 如何使用字典调用函数?