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 :

trigger et try catch


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Avatar de mohamed
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 217
    Points : 393
    Points
    393
    Par défaut trigger et try catch
    Bonjour j'ai 1 pbleme assez complexe car
    Je suis sur 1 base (base1) et j'ai un trigger qui quand il se déclenche exécute le code suivant sur une autre base(base2):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BEGIN TRY 
    INSERT INTO 
    Base2..matable 
    SELECT * FROM table1 
    END TRY 
     
    BEGIN CATCH 
    INSERT INTO LOGS(requetes) VALUES('test') 
    END CATCH
    Il s'exécute bien quand la base base2 est normal (càd en mode lecture ecriture) mais quand je mets ma base2 en mode lecture seule, il ne génère pas d'exception mais génère plutot 1 erreur:

    Msg 3930, Niveau 16, État 1, Procédure Versioning, Ligne 35
    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.
    L'instruction a été arrêtée
    .

    Je pense qu'il y'a pbleme au moment ou il ecrit dans le journal des transactions.Mais pourquoi quand j'exécute le code en ad hoc ou dnas 1 procedure stcokée ca marche et pas dans 1 trigger.
    Si j'ai paru trouver sans chercher c'est que j'ai longtemps cherché sans trouver!

    http://taslimanka.developpez.com

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Je pense que ton trigger repose sur les opérations simple de modification. Le soucis est que les opérations INSERT, DELETE, UPDATE sont dans un mode transactionnelles implicite. C'est-à-dire qu'elles sont enregistrées au journal des transactions. Ton code revient donc à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    BEGIN TRANSACTION  T1
    BEGIN TRY 
    INSERT INTO 
    Base2..matable 
    SELECT * FROM table1 
    END TRY 
     
    BEGIN CATCH 
    INSERT INTO LOGS(requetes) VALUES('test') 
    END CATCH
    COMMIT TRANSACTION T1
    Ca fonctionne en mode ad hoc et par procédure stockée parce qu'il n'y a pas ce mode transactionnel implicite.
    Bon courage pour la suite.

  3. #3
    Membre averti
    Avatar de mohamed
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 217
    Points : 393
    Points
    393
    Par défaut
    Merci Madinico

    Malheureusement c'est toujours la meme chose.Ca ne marche pas.

    PS:A ton avis comment pourrais t on contourner le probleme sachant que je voulais que mon code s'exécute et que le catch puisse s'exécuter....
    Si j'ai paru trouver sans chercher c'est que j'ai longtemps cherché sans trouver!

    http://taslimanka.developpez.com

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Points : 406
    Points
    406
    Par défaut
    Si je ne me trompe pas, il y a une possiblité de désactiver les transactions implicite dans le moteur SQL en paramétrant une variable système. Par contre, je ne connais pas le nom de la variable et son mode de paramétrage.
    Pour plus d'informations, je pense qu'ilm te faudra te plonger dans la documentation SQL Server.
    Bon courage pour la suite.

Discussions similaires

  1. [2012] Problème avec l'utilisation de TRY/CATCH à l'intérieure d'un trigger
    Par Fog-Thunder dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/02/2014, 09h20
  2. [2008] Triggers : Utilisation Try Catch
    Par nico1492 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 25/04/2013, 10h03
  3. [debutant sous eclipse] surround with try catch
    Par Alwin dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 26/06/2004, 20h03
  4. [try-catch] relancer les instruction du bloc try
    Par nounou dans le forum Langage
    Réponses: 11
    Dernier message: 12/05/2004, 11h23
  5. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35

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