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 :

Optimisation instructions set


Sujet :

Développement SQL Server

  1. #1
    Membre émérite Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2005
    Messages : 1 066
    Points : 2 562
    Points
    2 562
    Par défaut Optimisation instructions set
    Bonjour

    Au cours de mes travaux sur une procédure stockée SQL, j'ai lu les deux lignes suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SET @V = ISNULL(NULLIF(@V, 0), 1)
     
    SET @V = case when @V < 0 then 1 else @V end
    (alias B1)

    Je me suis donc posé la question suivante : est-il possible de les "regrouper" en une seule instruction set ?

    J'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SET @V = case when ISNULL(NULLIF(@V, 0), 1) < 0 then 1 else @V end
    (alias B2)

    Mais ce n'est pas équivalent à B1.

    En effet, avec B2, les 0 reste à 0 et les Null sont remplacés par 0.

    Alors qu'avec B1, les Null et 0 sont remplacés par 1.

    Toute aide est la bienvenue.

    Cordialement
    il n'y a jamais eu qu'un seul chrétien et il est mort sur la croix Friedrich Nietzsche
    L'homme est un apprenti, la douleur est son maitre Alfred de Musset
    C'est avoir tort que d'avoir raison trop tôt Praefectus Praetario Hadrianus

    my best memories ever : 2008 London Circle Line "The Booze Train"

  2. #2
    Membre actif
    Inscrit en
    juin 2006
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 227
    Points : 262
    Points
    262
    Par défaut
    Bonjour,

    Normal car les deux expressions ne sont pas équivalentes.
    Il faudrait écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @V = case when ISNULL(NULLIF(@V, 0), 1) < 0 then 1 else ISNULL(NULLIF(@V, 0), 1) end
    @+

  3. #3
    Membre émérite Avatar de shadowmoon
    Homme Profil pro
    Expert technique et fonctionnel .Net
    Inscrit en
    mai 2005
    Messages
    1 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Expert technique et fonctionnel .Net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2005
    Messages : 1 066
    Points : 2 562
    Points
    2 562
    Par défaut
    Merci pour la correction

    Bonne fin de journée
    il n'y a jamais eu qu'un seul chrétien et il est mort sur la croix Friedrich Nietzsche
    L'homme est un apprenti, la douleur est son maitre Alfred de Musset
    C'est avoir tort que d'avoir raison trop tôt Praefectus Praetario Hadrianus

    my best memories ever : 2008 London Circle Line "The Booze Train"

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    janvier 2010
    Messages
    5 639
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : janvier 2010
    Messages : 5 639
    Points : 13 062
    Points
    13 062
    Par défaut
    Bonjour,

    Je pense que ceci devrait même suffire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SET @V = CASE WHEN @V <= 0 THEN 1 ELSE ISNULL(@V, 1) END

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

Discussions similaires

  1. [Batch] Instruction SET et chaînes de caractères
    Par MrBiduleX dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 16/02/2016, 19h29
  2. [GAS AT&T] Instruction set
    Par Grizli dans le forum Assembleur
    Réponses: 3
    Dernier message: 15/02/2008, 22h53
  3. Réponses: 5
    Dernier message: 20/08/2006, 03h55
  4. [Optimisation] instruction decode, SUM, * / + -...
    Par Bicnic dans le forum Oracle
    Réponses: 1
    Dernier message: 12/05/2006, 10h21

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