sql-server - 如何在 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
谁能帮我解决这个问题?
解决方案
使用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;