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 :

[Procédures stockées] Bonnes pratiques de gestion des erreurs


Sujet :

Développement SQL Server

  1. #1
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut [Procédures stockées] Bonnes pratiques de gestion des erreurs
    Bonjour,

    je travaille actuellement sur SQL Server et je suis à la recherche de bonnes pratiques pour gérer les erreurs dans les procédures stockées.

    Je sais qu'il y a l'utilisation par exemple de @@error suivi d'un GOTO. Mais il me semble que le GOTO ne soit pas spécialement approprié.

    Avez-vous des normes dans vos projets? Si oui, de quels types?

    Merci d'avance.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  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
    21 760
    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 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Je sais qu'il y a l'utilisation par exemple de @@error suivi d'un GOTO. Mais il me semble que le GOTO ne soit pas spécialement approprié.
    Pour ma part je le trouve plus précis que le moderne TRY/CATCH introduit à partir de la version 2005.
    En effet lorsque vous êtes dans le TRY/CATCH la seule indication que vous pouvez avoir sur l'endroit ou s'est produite l'erreur est le N° de la ligne de code. Pas vraiment utile notamment si l'on est en, SQL dynamique et si les développeur sont assez bourrin pour ne pas indenter leur code !

    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 expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    J'ai trouvé en faisant des recherches sur le try/catch les fonctions suivantes :
    - ERROR_NUMBER()
    - ERROR_SEVERITY()
    - ERROR_STATE()
    - ERROR_PROCEDURE()
    - ERROR_LINE()
    - ERROR_MESSAGE()

    Est-ce que ça ne résoud pas le problème du manque d'info?

    Je me renseigne aussi sur comment retourner un message d'erreur à l'application appelante.
    Il y a par exemple la fonction RAISERROR, certains font des SELECT de la table sysmessage.

    Qu'utilisez-vous de manière générale sur le sujet?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    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 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    - ERROR_LINE() vous donne le n° de position ordinale de la ligne dans le code source... beurk !

    Il y a par exemple la fonction RAISERROR
    oui

    certains font des SELECT de la table sysmessage.
    beurk !
    Il est possible de rajouter ses propres message d'erreur (n>50000) Mieux vaut faire cela. mais les messages par défaut sont en général assez explicites....

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

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Points : 36
    Points
    36
    Par défaut
    Personnellement, j'enregistre l'erreur dans une table et je renvoie le numéro d'erreur à l'application appelante, même si cette dernière n'en fait généralement pas grand chose et se contente d'afficher "désolé pour cette erreur etc..."

    Voici ce que ça donne sur une procédure simple :

    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
     
    CREATE PROCEDURE MA_PROC
    AS
     DECLARE @Erreur INT
     SET @Erreur=0
     
     --Insérer ici l'ordre SQL
     
     SET @Erreur=@@error
     
     IF @Erreur != 0
      BEGIN
       DECLARE @Message NVARCHAR(50)
       SET @Message='ERREUR MA_PROC '+CAST(@Erreur AS VARCHAR(20))
       INSERT TABLE_ERREUR(getdate(), @Message)
     END
     
     RETURN @Erreur
    GO
    Voici un cas un peu plus compliqué avec annulation d'une transaction :

    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
    27
    28
    29
    30
    31
    32
    33
     
    CREATE PROCEDURE MA_PROC
    AS
     DECLARE @Erreur INT
     SET @Erreur=0
     
     BEGIN TRAN
     
      --Premier ordre SQL
      SET @Erreur=@@error
      IF @Erreur!=0 GOTO FIN
     
      --Deuxième ordre SQL
      SET @Erreur=@@error
     
    FIN:
     IF @@trancount>0
      BEGIN
       IF @Erreur != 0
        BEGIN
         ROLLBACK TRAN
         DECLARE @Message NVARCHAR(50)
         SET @Message='ERREUR MA_PROC '+CAST(@Erreur AS VARCHAR(20))
         INSERT TABLE_ERREUR(getdate(), @Message)
        END
       ELSE
        BEGIN
         COMMIT TRAN
        END
      END
     
     RETURN @Erreur
    GO
    Quant au try catch, je n'ai jamais essayé en SQL (je n'ai pas changé mes habitudes depuis SQL Server 6.5 ) mais je l'utilise en ASP .NET.

    En espérant que cela t'aidera

Discussions similaires

  1. les bonnes pratiques de gestions des mots de passe
    Par XDavidX dans le forum Sécurité
    Réponses: 2
    Dernier message: 04/02/2015, 15h19
  2. Forum des bonnes pratiques en gestion de projet 2014
    Par QRP-France dans le forum Communiqués
    Réponses: 0
    Dernier message: 20/08/2014, 17h58
  3. Gestion des erreurs et valeurs de retour des procedures stockées
    Par sarah65536 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/04/2009, 11h07
  4. Bonne gestion des erreurs d'un client/server
    Par gege22mars dans le forum Général Java
    Réponses: 3
    Dernier message: 03/04/2009, 10h55
  5. Réponses: 3
    Dernier message: 29/12/2008, 16h31

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