2010-04-15 15 views
1

Selon mon exigence de projet, je veux effectuer deux opérationsrequêtes SQL pour la création d'un point de restauration système et rollback à ce point précis

  1. Mot de passe Changer
  2. Déverrouiller le compte (seul compte déverrouillage, aucun changement de mot de passe!

Je veux retourner le succès seulement si les deux transactions réussissent. Dites si le changement de mot de passe réussit et que le déverrouillage échoue, je ne peux pas envoyer le succès ou l'échec. Donc, je veux créer un point de retour avant le changement de mot de passe, si les deux requêtes s'exécute avec succès, je vais valider la transaction. Si l'une des requêtes échoue, je rejette les modifications en revenant au point de restauration. Je le fais en C++ en utilisant ADO. Y at-il des requêtes SQL, à l'aide que je peux créer le point de restauration et de revenir à rollback points et commiting la transaction

J'utilise les commandes ci-dessous pour changement de mot de passe

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

pour Unlock compte

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

Merci d'avance!

Santhosh

Répondre

0

certains flux SQL prennent en charge les transactions. Placez les requêtes dans un bloc de transaction. Si une requête échoue dans le bloc, tout est annulé. Voici comment il cherche MySQL:

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

La nature des déclarations est que chacun DDL un constitiutes sa propre transaction discrète. Pensez-y de cette façon: un COMMIT est émis au début de la déclaration DDL et un autre à la fin de la réussite de la déclaration. Il n'y a pas d'option pour restaurer une instruction DDL réussie. Find out more.

Cependant, la ALTER LOGIN syntax vous permettrait de combiner le changement de mot de passe et les déclarations de déverrouillage en un seul:

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

Il n'y a pas de déclaration unique pour déverrouiller un mot de passe sans changer le mot de passe, pour cette option vous devez bascule l'opération CHECK_OPTION de la manière que vous décrivez.