【问题标题】:SQL Queries for Creating a rollback point and to rollback to that specific point用于创建回滚点并回滚到该特定点的 SQL 查询
【发布时间】:2011-02-08 06:25:34
【问题描述】:

根据我的项目要求,我想执行两个操作

  1. 密码更改
  2. 解锁账号(只解锁账号,不改密码!)

我希望只有在两个事务都成功时才返回成功。说如果密码更改成功并且解锁失败,我无法发送成功或失败。所以我想在密码更改之前创建一个回滚点,如果两个查询都成功执行,我将提交事务。如果其中一个查询失败,我将通过回滚到回滚点来丢弃更改。我正在使用 ADO 在 C++ 中执行此操作。是否有任何 SQL 查询,使用我可以创建回滚点并恢复到回滚点并提交事务

我正在使用以下命令 密码更改

ALTER LOGIN [username] WITH PASSWORD = N'password'

解锁帐号

ALTER LOGIN [%s] WITH CHECK_POLICY = OFF
ALTER LOGIN [%s] WITH CHECK_POLICY = ON

提前致谢!!

桑托什

【问题讨论】:

    标签: sql sql-server commit rollback


    【解决方案1】:

    DDL 语句的本质是每个语句都构成自己的离散事务。可以这样想:COMMIT 在 DDL 语句的开头发出,另一个在语句成功完成时发出。没有选项可以回滚成功的 DDL 语句。 Find out more.

    但是ALTER LOGIN syntax 将允许您将密码更改和解锁语句合二为一:

    ALTER LOGIN [username] WITH PASSWORD = 'password' UNLOCK ;
    

    没有任何一条语句可以在不更改密码的情况下解锁密码,因此对于该选项,您需要按照您描述的方式切换 CHECK_OPTION。

    【讨论】:

      【解决方案2】:

      一些 SQL 支持事务。将查询放在事务块中。如果块内的任何查询失败,则全部回滚。这是它对 MySQL 的看法:

      BEGIN;
      ALTER this CHANGE that;
      ...
      COMMIT;
      

      【讨论】:

        猜你喜欢
        • 2022-11-21
        • 2014-10-19
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        • 2013-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多