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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé 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 : 44
    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
    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

  2. #2
    Membre expérimenté
    Inscrit en
    Juin 2006
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 229
    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 éprouvé 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 : 44
    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
    Par défaut
    Merci pour la correction

    Bonne fin de journée

  4. #4
    Modérateur

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

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    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, 18h29
  2. [GAS AT&T] Instruction set
    Par Grizli dans le forum Assembleur
    Réponses: 3
    Dernier message: 15/02/2008, 21h53
  3. Réponses: 5
    Dernier message: 20/08/2006, 02h55
  4. [Optimisation] instruction decode, SUM, * / + -...
    Par Bicnic dans le forum Oracle
    Réponses: 1
    Dernier message: 12/05/2006, 09h21

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