繁体   English   中英

SQL Server 事务中的部分提交

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM