首页 > 解决方案 > 如何在 SQL Server 中回滚一次插入 3 个表的数据

问题描述

我有 3 个表,我正在更新并插入所有这些表。

我的要求是,如果我们在表 2 或表 3 出现任何错误,我需要回滚所有表中所有插入和更新的数据。

如果所有插入和更新都成功,那么我们需要一次提交所有表。

表格1 :

UPDATE table1
SET Name = 'A'
WHERE Id =1

INSERT INTO Table1
    SELECT *  
    FROM Table

表 2:

UPDATE table2 
SET Name = 'A'
WHERE Id =1

INSERT INTO Table2
    SELECT * 
    FROM Table

表3:

UPDATE table3 
SET Name = 'A'
WHERE Id =1

INSERT INTO Table3
    SELECT * 
    FROM Table

谁能帮我解决这个问题?

标签: sql-servertsql

解决方案


使用TRY...CATCH和事务:

--Begin the TRY
BEGIN TRY

    --Start a transaction    
    BEGIN TRANSACTION MyTran; --Might want a better name

    --Do all the operations    
    UPDATE table1
    SET Name = 'A'
    WHERE Id = 1;

    INSERT INTO Table1
    SELECT *
    FROM [Table];

    UPDATE table2
    SET Name = 'A'
    WHERE Id = 1;

    INSERT INTO Table2
    SELECT *
    FROM [Table];

    UPDATE table3
    SET Name = 'A'
    WHERE Id = 1;

    INSERT INTO Table3
    SELECT *
    FROM [Table];

    --All successful, so COMMIT
    COMMIT TRANSACTION MyTran;
END TRY
BEGIN CATCH

    --Roll back everything on failure
    ROLLBACK TRANSACTION MyTran;
    THROW;

END CATCH;

推荐阅读