1

私のプロジェクト要件に従って、2つの操作を実行したい

  1. パスワードの変更
  2. アカウントのロック解除(アカウントのロック解除のみ、パスワード変更なし!)

両方のトランザクションが成功した場合にのみ成功を返します。パスワードの変更が成功し、ロック解除が失敗した場合、成功または失敗を送信できません。したがって、パスワードを変更する前にロールバック ポイントを作成したいと思います。両方のクエリが正常に実行された場合は、トランザクションをコミットします。クエリの 1 つが失敗した場合、ロールバック ポイントにロールバックして変更を破棄します。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 ステートメントの性質は、それぞれが独自の個別のトランザクションを構成することです。このように考えてみてください。DDL ステートメントの開始時に COMMIT が発行され、ステートメントが正常に完了したときに別の COMMIT が発行されます。成功した DDL ステートメントをロールバックするオプションはありません。 詳細をご覧ください。

ただし、ALTER LOGIN 構文を使用すると、パスワード変更ステートメントとロック解除ステートメントを 1 つに組み合わせることができます。

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 に答える