问题描述
我有一个事务和两个要在其中插入一些数据的表,我可以在sql Server中进行部分提交吗
BEGIN TRANSACTION tran1
BEGIN TRY
--Insert into Table1
--Insert into Table2
COMMIT TRANSACTION tran1
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION tran1
END CATCH
以上代码将回滚两个表的数据,如果表1插入没有错误,可以回退表2,如果发生任何错误,可以回退表2。
解决方法
答案是肯定的,尽管交易确实是原子的,但您可以使用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
您可能需要调整插入顺序。
,不,你不能。 事务是原子的。也就是说,所有步骤都作为一个步骤执行,一起提交或回滚。 如果将两个插入都放在一个事务中,则不能提交到一个表。 可能的话,您可以使用其他交易。