首页 > 解决方案 > 如何在事务期间发生错误时回滚

问题描述

我想创建一个事务,它将多个插入语句包含到数据库中的不同表中。我想要实现的是回滚,以防例如插入语句失败。

我现在拥有的是以下内容,但我不确定这是否会表现出我想要的效果。

SET XACT_ABORT ON

BEGIN TRAN
    INSERT INTO [FTR].[dbo].[Usr](fname, lname, phonea, addr)
    (
        SELECT p_code, y_code, y_name, r_coden
        FROM [ADS].[Prep].[InfoEm]
    )
    --
    -- other multiple insert statements
    --
COMMIT TRAN

如果任何插入语句失败,甚至可能是选择语句,此查询是否会回滚。

标签: sqlsql-servertsql

解决方案


更改您的代码如下:

SET XACT_ABORT ON

BEGIN TRY
    BEGIN TRAN
    INSERT INTO [FTR].[dbo].[Usr](fname, lname, phonea, addr)
    (
        SELECT p_code, y_code, y_name, r_coden
        FROM [ADS].[Prep].[InfoEm]
    )
    --
    -- other multiple insert statements
    --
    COMMIT TRAN
END TRY
BEGIN CATCH

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

推荐阅读