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 imbriqués et TRANSACTION


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 60
    Par défaut TRY CATCH imbriqués et TRANSACTION
    Bonjour à tous,

    Je reste perplexe devant un problème relativement simple...

    Je voudrais comprendre pourquoi les 2 blocs d'instructions ci dessous n'ont pas le même comportment :

    1er bloc : il a un comportement "normal" (je comprend ce qu'il fait et je suis d'accord)
    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
     
    BEGIN
    	BEGIN TRAN;
    		DECLARE @a int
    		declare @b int
    		BEGIN TRY
    			set @a=1/1
    			BEGIN TRY
    				set @b=1/0
    			END TRY
    			BEGIN CATCH
    				PRINT 'Erreur CATCH 2 ' + ERROR_MESSAGE(); 
    			END CATCH
    		END TRY
    		BEGIN CATCH
    			ROLLBACK;
    			PRINT 'Erreur CATCH 1 ' + ERROR_MESSAGE(); 
    		END CATCH
    	IF XACT_STATE() = 1
    		COMMIT;  
    END
    2ème bloc (je ne comprends pas pourquoi ça plante) :

    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
     
    BEGIN
    	BEGIN TRAN;
    		DECLARE @a int
    		declare @b int
    		BEGIN TRY
    			set @a=1/1
    			BEGIN TRY
    				set @b=cast('1A' as int)
    			END TRY
    			BEGIN CATCH
    				PRINT 'Erreur CATCH 2 ' + ERROR_MESSAGE(); 
    			END CATCH
    		END TRY
    		BEGIN CATCH
    			ROLLBACK;
    			PRINT 'Erreur CATCH 1 ' + ERROR_MESSAGE(); 
    		END CATCH
    	IF XACT_STATE() = 1
    		COMMIT;  
    END
    La seule différence entre les 2 blocs, c'est la ligne
    set @b=1/0
    changée en
    set @b=cast('1A' as int)

    J'ai bien cherché sur le net, mais sans succès....
    si quelqu'un pouvais éclairer ma lanterne...

    Merci d'avance
    Seb

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Voici comment vous devez faire vos blocs TRY/CATCH :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    BEGIN TRY
     
    ... code ...
     
    END TRY
    BEGIN CATCH
       IF XACT_STATE() <> 0
          ROLLBACK;
       THROW;
    END CATCH
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 60
    Par défaut
    ça à l'air de marcher (je dis ça a l'air car mon cas concret est plus complexe).

    Merci de ton intervention rapide SQLPro.

    J'en profite pour te remercier pour tes différents articles sur SQL.

    bonne fin de journée !

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

Discussions similaires

  1. [2008] TRY CATCH , La transaction actuelle ne peut pas être validée
    Par ricil78 dans le forum Développement
    Réponses: 2
    Dernier message: 14/09/2015, 09h35
  2. [PostgreSQL] try catch dans une transaction
    Par Cyanatide dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 18/10/2011, 11h56
  3. [PDO] try catch imbriqués
    Par lounislounis dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 11/06/2010, 15h04
  4. Try/Catch imbriqués ?
    Par Robbin Hoodz dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 07/05/2010, 14h21
  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