[英]SQL Server Partial commit in transaction
我有一个事务和两个表,我在其中插入了一些数据,我可以在 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 插入没有错误,我们可以提交表 1,但如果发生任何错误,则回滚表 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
您可能需要调整广告顺序。
不,你不能。 事务是原子的。 也就是说,所有步骤都作为一个执行、一起提交或回滚。 如果将两个插入操作放入一个事务中,则无法提交到一个表。 如果可能,您可以使用不同的事务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.