用于创建回滚点和回滚到该特定点的SQL查询

时间:2010-04-15 07:48:15

标签: sql sql-server commit rollback

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

  1. 密码更改
  2. 解锁帐户(仅解锁帐户,无密码更改!)
  3. 我希望只有两个事务都成功才能返回成功。假设密码更改成功并且解锁失败,我无法发送成功或失败。所以我想在密码更改之前创建一个回滚点,如果两个查询都成功执行,我将提交事务。如果其中一个查询失败,我将通过回滚到回滚点来放弃更改。我在使用ADO的C ++中这样做。是否有任何SQL查询,使用我可以创建回滚点并恢复回滚点并提交事务

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

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

    解锁帐户

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

    提前致谢!!

    Santhosh

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

某些SQL支持事务。将查询放在事务块中。如果块中的任何查询失败,则回滚所有查询。这是它寻找MySQL的方式:

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