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 :

Quelle est la différence ?


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 26
    Par défaut Quelle est la différence ?
    Bonjour à tous,

    J'ai la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE kep_val.dbo.Vars
        SET TmpCycleT = 
            (
              SELECT opcycletime 
              FROM Operations.dbo.cworkoptable b 
                 WHERE 
                    kep_val.dbo.Vars.cnchandle = b.opcnc 
                   AND b.opstate = '1' OR b.opstate = '0'                                           
            )
    Qui me retourne le message d'erreur suivant:
    Msg 512, Niveau 16, Etat 1, Ligne 1
    La sous-requête a retourné plusieurs valeurs. Cela n'est pas autorisé quand la sous requête suit 0, !=, <, <=, >, >= ou quand elle est utilisée en temps qu'expression
    Si je substitue la ligne "AND b.opstate = '1' OR b.opstate = '0'" par AND b.opstate IN ('1', '0')
    cela fonctionne correctement.

    Quelle est la différence?

    Par avance merci et bonne journée

    Cordialement
    André

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    C'est une question de précédence des opérateurs.
    Telle que tu l'as écrite, la condition est évaluée ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE 
            (kep_val.dbo.Vars.cnchandle = b.opcnc 
        AND b.opstate = '1' ) OR b.opstate = '0'
    Alors que tu aurais voulu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE 
            kep_val.dbo.Vars.cnchandle = b.opcnc 
        AND (b.opstate = '1' OR b.opstate = '0')
    Il suffit donc d'ajouter des parenthèses à bon escient.
    Dans ton cas, l'usage du IN est beaucoup plus élégant
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    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,

    Et si, comme je le suppose, b.opstate est de type INT, on peut même pousser l'élégance a son paroxysme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND b.opstate  BETWEEN 0 AND 1
    .

  4. #4
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 26
    Par défaut Merci pour vos réponses
    Merci pour vos réponses.

    Cordialement
    André

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/06/2010, 16h57
  2. Réponses: 5
    Dernier message: 03/05/2005, 18h22
  3. Réponses: 11
    Dernier message: 31/01/2005, 17h48
  4. Quelle est la différence entre le float et le real ?
    Par Manson dans le forum Débuter
    Réponses: 3
    Dernier message: 10/08/2004, 17h26
  5. execute/perform quelle est la différence?
    Par stago dans le forum Struts 1
    Réponses: 2
    Dernier message: 30/06/2004, 10h51

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