SQL 服务器在事务中部分提交
SQL Server Partial commit in transaction
我有一个事务和两个 tables,我要在其中插入一些数据,我可以在 SQL 服务器
中进行部分提交吗
BEGIN TRANSACTION tran1
BEGIN TRY
--Insert into Table1
--Insert into Table2
COMMIT TRANSACTION tran1
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION tran1
END CATCH
上面的代码会回滚两个table的数据,有没有办法我们可以提交table 1如果table 1没有错误插入但回滚table 2 如果发生任何错误。
不,你不能。
事务是原子的。也就是说,所有步骤都作为一个步骤执行,一起提交或回滚。
如果将两个插入都放入一个事务中,则不能提交一个 table。
如果可能,您可以使用不同的事务。
答案是肯定的,尽管事务确实是原子的,但您可以使用 savepoint。因此,在您的情况下,代码可能如下所示(未经测试):
BEGIN TRY
BEGIN TRANSACTION
--Insert into Table1
-- savepoint
SAVE TRANSACTION tran1
--Insert into Table2
-- commit the whole transaction
COMMIT TRANSACTION
END TRY
BEGIN CATCH
-- rollback to savepoint
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION tran1
END CATCH
您可能需要调整广告顺序。
我有一个事务和两个 tables,我要在其中插入一些数据,我可以在 SQL 服务器
中进行部分提交吗BEGIN TRANSACTION tran1
BEGIN TRY
--Insert into Table1
--Insert into Table2
COMMIT TRANSACTION tran1
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION tran1
END CATCH
上面的代码会回滚两个table的数据,有没有办法我们可以提交table 1如果table 1没有错误插入但回滚table 2 如果发生任何错误。
不,你不能。 事务是原子的。也就是说,所有步骤都作为一个步骤执行,一起提交或回滚。 如果将两个插入都放入一个事务中,则不能提交一个 table。 如果可能,您可以使用不同的事务。
答案是肯定的,尽管事务确实是原子的,但您可以使用 savepoint。因此,在您的情况下,代码可能如下所示(未经测试):
BEGIN TRY
BEGIN TRANSACTION
--Insert into Table1
-- savepoint
SAVE TRANSACTION tran1
--Insert into Table2
-- commit the whole transaction
COMMIT TRANSACTION
END TRY
BEGIN CATCH
-- rollback to savepoint
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION tran1
END CATCH
您可能需要调整广告顺序。