• 相关软件
    >SAVE TRANSACTION 创建者:webmaster 更新时间:2006-02-16 15:51

    在事务内设置保存点。



    语法


    SAVE TRAN [ SACTION ] { savepoint_name | @savepoint_variable }



    参数


    savepoint_name



    是指派给保存点的名称。保存点名称必须符合标识符规则,但只使用前 32 个字符。



    @savepoint_variable



    是用户定义的、含有有效保存点名称的变量的名称。必须用 charvarcharncharnvarchar 数据类型声明该变量。



    注释


    用户可以在事务内设置保存点或标记。保存点定义如果有条件地取消事务的一部分,事务可以返回的位置。如果将事务回滚到保存点,则必须(如果需要,使用更多的 Transact-SQL 语句和 COMMIT TRANSACTION 语句)继续完成事务,或者必须(通过将事务回滚到其起始点)完全取消事务。若要取消整个事务,请使用 ROLLBACK TRANSACTION transaction_name 格式。这将撤消事务的所有语句和过程。



    在由 BEGIN DISTRIBUTED TRANSACTION 显式启动或从本地事务升级而来的分布式事务中,不支持 SAVE TRANSACTION。



    重要  当事务开始时,将一直控制事务中所使用的资源直到事务完成(也就是锁定)。当将事务的一部分回滚到保存点时,将继续控制资源直到事务完成(或者回滚全部事务)。



    权限


    默认情况下,将 SAVE TRANSACTION 权限授予任何有效用户。



    示例


    下例更改分给 The Gourmet Microwave 的两位作者的版税。数据库将会在两个更新间不一致,因此必须将它们分组为用户定义的事务。



    BEGIN TRANSACTION royaltychange
      UPDATE titleauthor
        SET royaltyper = 65
          FROM titleauthor, titles
            WHERE royaltyper = 75
              AND titleauthor.title_id = titles.title_id
              AND title = 'The Gourmet Microwave'
      UPDATE titleauthor
        SET royaltyper = 35
          FROM titleauthor, titles
            WHERE royaltyper = 25
              AND titleauthor.title_id = titles.title_id
              AND title = 'The Gourmet Microwave'
    SAVE TRANSACTION percentchanged

    /*
    After having updated the royaltyper entries for the two authors, the
    user inserts the savepoint percentchanged, and then determines how a
    10-percent increase in the book's price would affect the authors' royalty earnings.
    */


    UPDATE titles
      SET price = price * 1.1
        WHERE title = 'The Gourmet Microwave'
    SELECT (price * royalty * ytd_sales) * royaltyper
      FROM titles, titleauthor
        WHERE title = 'The Gourmet Microwave'
          AND titles.title_id = titleauthor.title_id
    /*
    The transaction is rolled back to the savepoint
    with the ROLLBACK TRANSACTION statement.

    */

    ROLLBACK TRANSACTION percentchanged
    COMMIT TRANSACTION

    /* End of royaltychange. */
    相关文章
    本页查看次数: