单个存储过程中的多个事务

use*_*886 1 sql sql-server

我需要从SQL Server 2008中的2个表中删除数据.

我有两个表A和B.我需要将每个表放在一个单独的事务中.

这是我正在使用的代码.

BEGIN TRANSACTION;
BEGIN TRY
    DELETE      from A
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;

END CATCH

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;


BEGIN TRANSACTION;
BEGIN TRY
    DELETE     from B
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
END CATCH

IF @@TRANCOUNT > 0
    COMMIT TRANSACTION;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法在SQL Server中实现多个事务和错误处理?

我需要为每个表放置单独的事务.

当其中一个事务失败时,我收到错误.

EXECUTE之后的事务计数表示BEGIN和COMMIT语句的数量不匹配.记录不会从其他交易中删除

Ana*_*dke 5

试试这个:

BEGIN TRANSACTION;
BEGIN TRY
    DELETE from A
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
END CATCH


BEGIN TRANSACTION;
BEGIN TRY
    DELETE     from B
    COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION;
END CATCH
Run Code Online (Sandbox Code Playgroud)