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 :

[SQL2005] TRY-CATCH ne passe pas le contrôle au CATCH ?


Sujet :

MS SQL Server

  1. #1
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut [SQL2005] TRY-CATCH ne passe pas le contrôle au CATCH ?
    Bonjour,

    Soit le script suivant :

    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
    CREATE PROCEDURE PsTest
    AS
    BEGIN
    	BEGIN TRY
    		PRINT 'Avant SELECT'
    		SELECT dbo.Fn_FonctionQuiNExsitePas()
    		PRINT 'Après SELECT'
    	END TRY
    	BEGIN CATCH
    		PRINT 'Entrée CATCH'
    		PRINT 'Erreur: ' + ERROR_MESSAGE()
    		PRINT 'Sortie CATCH'
    	END CATCH
    END
    GO
     
    EXEC dbo.PsTest
    La fonction Fn_FonctionQuiNExsitePas() porte bien son nom.

    A l'exécution de la procédure stockée PsTest, j'obtiens la sortie suivante :

    Avant SELECT
    Msg*4121, Niveau*16, État*1, Procédure*PsTest, Ligne*6
    Impossible de trouver la colonne "dbo" la fonction définie par l'utilisateur ou l'agrégat "dbo.Test". Le nom pourrait également être ambigu.
    L'erreur étant de niveau 16, le contrôle aurait du être transmis au bloc CATCH, donc j'aurais du voir les "Entrée CATCH" et "Sortie CATCH".

    Pourquoi cela se passe-t-il autrement ?

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    Les types d'erreur suivants ne sont pas gérés par un bloc CATCH lorsqu'ils surviennent au même niveau d'exécution que la construction TRY…CATCH :
    • Les erreurs de compilation, telles que les erreurs de syntaxe, qui empêchent un lot de s'exécuter.
    • Les erreurs survenant durant la recompilation au niveau de l'instruction, telles que les erreurs de résolution de noms des objets qui surviennent après la compilation en raison de la résolution de noms différée.
    Ces erreurs sont renvoyées au niveau qui a exécuté le lot, la procédure stockée ou le déclencheur.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    C'est parfaitement logique car vous pouvez créer, modifier ou supprimer la fonction après avoir créé la procédure.

    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/ * * * * *

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonsoir,

    Merci à tous les deux, ça m'apprendra à lire la documentation.
    Mais alors pourquoi mettre un niveau d'erreur 16 ? Même si c'est vrai que c'est une erreur du développeur ?
    Pourquoi au moment de la création, l'existence de l'objet n'est-elle pas vérifiée ?

    vous pouvez créer, modifier ou supprimer la fonction après avoir créé la procédure.
    Je ne trouve pas cela normal.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Pourquoi au moment de la création, l'existence de l'objet n'est-elle pas vérifiée ?
    C'est l'essence même de SQL : pourvoir modifier ou supprimer tout objet en toute indépendance. Si vous voulez que cela soit fait de manière cohérentes vis à vis des autres objets, à vous de tester leur utilisation par les tables de méta données et de gérer vos scripts de création au sein d'une transaction.

    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/ * * * * *

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/01/2008, 12h39
  2. Requête qui ne passe pas
    Par TheBart dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/08/2005, 10h12
  3. Envoi de mail [Hotmail : OK ; Wanadoo : Passe pas]
    Par NeoMan dans le forum Réseau
    Réponses: 14
    Dernier message: 28/07/2005, 10h52
  4. Sujet du mailto quine passe pas...
    Par Gourouni dans le forum ASP
    Réponses: 6
    Dernier message: 21/01/2005, 15h57
  5. Un tri qui me plait pas...
    Par szdavid dans le forum Langage SQL
    Réponses: 5
    Dernier message: 24/05/2004, 11h07

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