如果更新不成功如何回滚?

发布于 2024-09-29 03:19:54 字数 372 浏览 0 评论 0原文

我写了一个事务,例如:

    BEGIN TRAN

    UPDATE  [Table1]
    SET [Name] = 'abcd'
    WHERE   [ID] = 1

    UPDATE  [Table2]
    SET [Product] = 'efgh'
    WHERE   [ID] = 10

    UPDATE  [Table3]
    SET [Customar] = 'ijkl'
    WHERE   [ID] = 11

现在我想在任何更新不成功时回滚。例如,在表 2 中,如果没有 ID=10 的产品,则应回滚事务。如何执行此操作?请注意,我使用的是 SQLServer 2000。

I have written a transaction like:

    BEGIN TRAN

    UPDATE  [Table1]
    SET [Name] = 'abcd'
    WHERE   [ID] = 1

    UPDATE  [Table2]
    SET [Product] = 'efgh'
    WHERE   [ID] = 10

    UPDATE  [Table3]
    SET [Customar] = 'ijkl'
    WHERE   [ID] = 11

Now I want to rollback if any UPDATE is not success. For example in Table2 if there is no Product with ID=10 the transaction should be rolled back. How to do this?Please note that I am using SQLServer 2000.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

会发光的星星闪亮亮i 2024-10-06 03:19:54

SQL Server 2000。如果使用 SET XACT_ABORT ON,则不需要回滚

SET XACT_ABORT ON --to ensure rollback
BEGIN TRAN -- @@TRANCOUNT + 1

UPDATE  [Table1]
SET [Name] = 'abcd'
WHERE   [ID] = 1
IF @@ROWCOUNT = 0 ROLLBACK TRAN

IF @@TRANCOUNT > 0
BEGIN
    UPDATE  [Table2]
    SET [Product] = 'efgh'
    WHERE   [ID] = 10

    IF @@ROWCOUNT = 0 ROLLBACK TRAN
END

IF @@TRANCOUNT > 0
BEGIN
    UPDATE  [Table3]
    SET [Customar] = 'ijkl'
    WHERE   [ID] = 11

    IF @@ROWCOUNT = 0 ROLLBACK TRAN
END

IF @@TRANCOUNT > 0 COMMIT TRAN

SQL Server 2000. You don't need rollback if you use SET XACT_ABORT ON

SET XACT_ABORT ON --to ensure rollback
BEGIN TRAN -- @@TRANCOUNT + 1

UPDATE  [Table1]
SET [Name] = 'abcd'
WHERE   [ID] = 1
IF @@ROWCOUNT = 0 ROLLBACK TRAN

IF @@TRANCOUNT > 0
BEGIN
    UPDATE  [Table2]
    SET [Product] = 'efgh'
    WHERE   [ID] = 10

    IF @@ROWCOUNT = 0 ROLLBACK TRAN
END

IF @@TRANCOUNT > 0
BEGIN
    UPDATE  [Table3]
    SET [Customar] = 'ijkl'
    WHERE   [ID] = 11

    IF @@ROWCOUNT = 0 ROLLBACK TRAN
END

IF @@TRANCOUNT > 0 COMMIT TRAN
夜访吸血鬼 2024-10-06 03:19:54

在每个 UPDATE 语句之前,您需要执行 BEGIN TRAN,在每个 UPDATE 语句之后,您需要执行此操作 -

if @@Error > 0
 THEN 
 BEGIN
   ROLLBACK TRAN
 END
Else
 BEGIN
   COMMIT TRAN
 END

Before each UPDATE statement you need to do BEGIN TRAN and after each of your UPDATE statement, you need to do this -

if @@Error > 0
 THEN 
 BEGIN
   ROLLBACK TRAN
 END
Else
 BEGIN
   COMMIT TRAN
 END
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文