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

Développement SQL Server Discussion :

TRY CATCH , La transaction actuelle ne peut pas être validée [2008]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 401
    Par défaut TRY CATCH , La transaction actuelle ne peut pas être validée
    Bonsoir,

    Dans un trigger en faisant un try catch, je voulais dans le CATCH, insérer le message d'erreur dans une table pour lire plus tard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                    BEGIN TRY
    			Insert INTO BASE1..MA_TABLE(MonChamp1, MonChamp2)
    	 		SELECT 'A' as MonChamp1 , 'B' as MonChamp2
    	 		FROM INSERTED S WHERE S.champ3=1
    	 	END TRY
    	 	BEGIN CATCH
    	 		INSERT INTO [BASE2]..[Erreurs] () VALUES ('mon message erreur') 
    	 	END CATCH
    j'ai le message d'erreur ci-desssous qui se produit lors de l'insert qui se trouve dans le CATCH (j'ai fait un pas à pas pour le savoir)

    La transaction actuelle ne peut pas être validée et ne prend pas en charge les opérations qui écrivent dans le fichier journal. Restaurez la transaction.

    Malgré des recherches sur le net je comprend pas d'où vient le problème ?


    Merci

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Hello,

    Le trigger se déclenche dans le contexte de la transaction implicite de la commande qui l'appelle. Donc tu es dans une transaction.
    Ton deuxième INSERT se produit à un moment où la transaction n'est plus validable à cause de l'erreur, donc il ne sert à rien de toute façon : l'insertion ne pourra pas se faire.
    Ajoute un ROLLBACK juste avant. Cela va déclencher l'exception 3609 : "La transaction s'est terminée dans le déclencheur. Le traitement a été abandonné.", mais le message d'erreur originel sera loggué dans ta table d'erreurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BEGIN TRY
        Insert INTO BASE1..MA_TABLE(MonChamp1, MonChamp2)
        SELECT 'A' as MonChamp1 , 'B' as MonChamp2
        FROM INSERTED S WHERE S.champ3=1
    END TRY
    BEGIN CATCH
        ROLLBACK
        INSERT INTO [BASE2]..[Erreurs] () VALUES ('mon message erreur') 
    END CATCH
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    USE tempdb;
    GO
     
    CREATE TABLE coco (c varchar(10))
    CREATE TABLE mama (c varchar(10))
    GO
     
    CREATE TRIGGER atr_coco
    ON coco
    AFTER INSERT
    AS BEGIN
    BEGIN TRY
        Insert INTO mama
        SELECT 'qsfsfqsfqsfsqfqsfsqdfsqfsfd'
        FROM INSERTED S
    END TRY
    BEGIN CATCH
        ROLLBACK
        INSERT INTO mama VALUES ('hum') 
    END CATCH
    END
    GO
     
    INSERT INTO coco VALUES ('rr')
     
    SELECT * FROM mama

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 401
    Par défaut
    Merci pour ton aide, avec tes explications, ça marche, parfait

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/05/2009, 19h15
  2. la mémoire ne peut pas être "written"
    Par zouzou1949 dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 17/12/2006, 14h16
  3. Mémoire ne peut pas être read
    Par tedparker dans le forum Access
    Réponses: 4
    Dernier message: 27/09/2006, 11h54
  4. Liens URL : La mémoire ne peut pas être "read" ?
    Par fredfred dans le forum Windows XP
    Réponses: 4
    Dernier message: 28/07/2006, 08h48
  5. Réponses: 6
    Dernier message: 03/09/2003, 10h29

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