1

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

  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

提前致谢!!

桑托什

4

2 回答 2

1

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

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

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

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

于 2010-04-15T09:19:58.293 回答
0

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

BEGIN;
ALTER this CHANGE that;
...
COMMIT;
于 2010-04-15T07:54:53.500 回答