IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

[T-SQL] Imbrication de TRANSACTION & RollBack


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de arnolem
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 852
    Par défaut [T-SQL] Imbrication de TRANSACTION & RollBack
    Bonjour,

    Voici ma question :

    J'ai une procédure stockée SP_MASTER qui appel successivement SP_1 et SP_2.

    Ma procédure SP_1 :
    • Démarre une TRANSACTION T_1
    • Fait un UPDATE
    • Fait un DELETE
    • Fait un INSERT
    • Lance un COMMIT ou un ROLLBACK T_1
    • RETURN @@error
    Ma procédure SP_2 :
    • Démarre une TRANSACTION T_2
    • Fait un UPDATE
    • Fait un DELETE
    • Fait un INSERT
    • Lance un COMMIT ou un ROLLBACK T_2
    • RETURN @@error
    Ma procédure SP_MASTER :
    • Appel SP_1
    • Appel SP_2
    Je voudrais être capable d'annuler SP_1 si SP_2 reviens en erreur.
    J'ai donc fais une nouvelle transaction dans SP_MASTER et je fais un ROLLBACK de celle-ci si SP_1 ou SP_2 retourne une erreur mais ça ne fonctionne pas.

    Est-ce possible ?
    Si oui comment ?

    Merci beaucoup

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    je pense que c'est normal car un commit est un commit (c'est irrévocable)

    a mon avis, sort les transactions des SP_1 et SP_2 et ne mets que celle de la master

  3. #3
    Rédacteur

    Avatar de arnolem
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 852
    Par défaut
    Merci, ça conforte mon idée.

    Comme la SP_1 et la SP_2 peuvent être appelées indépendamment de SP_MASTER, dans certains cas, je vais avoir besoin de faire ses transactions.

    Je vais donc opter pour la version suivante :

    Dans SP_1 & SP_2, je récupère la valeur de @@trancount afin de savoir si elle se trouvent ou non dans une imbrication.
    Ensuite, si elles sont appelées directement (@@trancount = 0), je fais ma transaction.
    Si elles sont appelées à l'intérieur d'une autre transaction(@@trancount = 1), je ne fais que ma transaction SP_MASTER et je ne démarre pas les autres.

    Merci pour ton retour.

Discussions similaires

  1. Sécuriser une transaction avec rollback
    Par AIRONE dans le forum Sécurité
    Réponses: 1
    Dernier message: 14/09/2007, 14h42
  2. [Requête] SQL SERVER 2000 / Transact SQL
    Par plutonium719 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/09/2007, 17h56
  3. [SQL] Annuler une transaction SQL en PHP ou en SQL
    Par weldata dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/07/2007, 10h10
  4. [TRANSAC SQL] compréhension exemple transaction
    Par pinocchio dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/10/2006, 17h27
  5. [SQL Server 2000] Transaction deadlocked
    Par CyrilT dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/09/2006, 15h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo