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 :

Analyse message d'erreur


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Analyse message d'erreur
    Bonjour,

    J'ai un soucis sur l'analyse d'un message d'erreur, enfin, plutôt un warning, mais je ne veux pas qu'il s'affiche, je dois donc supprimer tous les cas où il pourrait être déclenché.

    Voici le message en question :
    Warning: Null value is eliminated by an aggregate or other SET operation.
    Bon, j'ai bien compris le coup des fonctions d'agrégation, j'ai donc modifié tous mes appels à max, sum en utilisant en plus IsNull, par exemple : max(IsNull(col, 0)).

    J'aimerai savoir s'il y a d'autres cas que ceux des fonctions d'agrégation qui peuvent lancer ce warning ? (en particulier, je ne comprends pas la partie "or other SET operation" dans le message...)

    Merci de votre aide !

    PS: je ne veux pas utiliser SET ANSI_WARNINGS parce que ça bloque aussi les alertes pour les divisions par zéro et les arthimetic overflow...

  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
    Ceci est un message tout à fait normal et prévu par la norme SQL. Vous ne pouvez pas l'empêcher et ce n'est pas un message d'erreur, mais une simple information.

    En revanche la simplification que vous faite ( max(IsNull(col, 0)) ) est susceptible de donner résultats totalement faux à vos requêtes !

    Démonstration... Voici une table avec des personnes et leur âge pas toujours renseigné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE T_PERSONNE_PRS (PRS_NOM VARCHAR(8), PRS_AGE INT)
     
    INSERT INTO T_PERSONNE_PRS VALUES ('claude', 50);
    INSERT INTO T_PERSONNE_PRS VALUES ('marc', 45)
    INSERT INTO T_PERSONNE_PRS VALUES ('jacques', NULL)
    INSERT INTO T_PERSONNE_PRS VALUES ('pierre', 55)
    INSERT INTO T_PERSONNE_PRS VALUES ('luc', NULL)
    Voici deux requêtes qui ne donnent pas du tout la même chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT AVG(PRS_AGE) AS AGE_MOYEN
    FROM   T_PERSONNE_PRS
     
    AGE_MOYEN
    -----------
    50
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT AVG(IsNULL(PRS_AGE,0)) AS AGE_MOYEN
    FROM   T_PERSONNE_PRS
     
    AGE_MOYEN
    -----------
    30
    Vous faites donc fausse route sur le sujet, d'autant que de nombreux autres messages du même genre peuvent être envoyés par SQL Server.

    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
    Invité
    Invité(e)
    Par défaut
    Merci pour la réponse...

    Je sais que ce message est normal et qu'il n'est pas grave. Cependant, vu ma situation, je suis obligée de faire en sorte qu'il ne s'affiche pas. En effet, l'exécution d'un script via OSQL ne provoquant pas toujours un retour avec code d'erreur lorsqu'un problème est arrivé, je suis obligée de contrôler la sortie. Exemple : timeout, mauvais argument qui ne fait qu'afficher l'aide mais avec un code retour 0.

    Effectivement, si j'effectue une moyenne, l'utilisation du IsNull fausse le résultat, mais dans le cas d'un max ou d'un sum (les fonctions d'agrégation que j'utilise) ça ne pose pas de problème.

    J'ai trouvé une solution dans mon cas, bien que je ne comprenne pas où était généré le warning ni pourquoi ma correction change quelque chose (ce doit être un cas tordu hyper pointu).

Discussions similaires

  1. [TSocket] Message d'erreur
    Par rgz dans le forum Web & réseau
    Réponses: 6
    Dernier message: 04/07/2003, 09h16
  2. Surcharger le message d'erreur après un OnException
    Par Tirlibibi dans le forum XMLRAD
    Réponses: 2
    Dernier message: 24/04/2003, 11h42
  3. Réponses: 4
    Dernier message: 04/03/2003, 01h05
  4. [CR] Message d'erreur
    Par nono1 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/09/2002, 14h54
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

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