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 :

Clause IN : Bug SQL Server ou Y a t il une explication ?


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Clause IN : Bug SQL Server ou Y a t il une explication ?
    Bonjour,
    Je suis tombé par hasard sur ce cas et je ne parviens pas à l'expliquer. Pouvez vous m'aider ??

    J'exécute une requête du style suivant sur une base SQL Server 2008 R2 :

    SELECT * FROM Table WHERE Cle_etrangère1 IN (SELECT col_inconnue FROM Table2 WHERE critère_sur_table2)

    ==> Je tiens à préciser que la sous requête exécutée seule : "SELECT col_inconnue FROM Table2 WHERE critère_sur table2" génère une erreur SQL Server de compilation car la colonne demandée "col_inconnue" n'appartient pas à la table "Table2"

    MAIS la requête complète fonctionne !!! il semble que le filtre "WHERE cle_etrangère1 IN ..." ne s'applique pas !!!


    Pouvez vous me dire pourquoi ??

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    On peut avoir la requête réelle qui vous genère votre erreur ?
    Merci d'avance

    ++

  3. #3
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    parce que col_inconnue appartient a votre 1er table (Table) et non a la seconde (table2) ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Bonjour,

    On peut avoir la requête réelle qui vous genère votre erreur ?
    Merci d'avance

    ++
    Bonjour ci dessous un exemple de requête tiré de la base ASPNETDB (je n'ai les bases d'exemples de SQL Server DSL)

    SELECT *
    FROM dbo.aspnet_Roles
    WHERE ApplicationID in (SELECT RoleId FROM dbo.aspnet_Applications WHERE applicationName = 'rouge')

    RoleId n'existe pas dans la table "dbo.aspnet_Applications", mais existe bien dans "dbo.aspnet_Roles".
    Si l'on prend une colonne qui n'existe pas du tout ou une colonne d'une autre table de la base de données, SQL Server génère bien une erreur...

  5. #5
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Il n'y a pas de bug la dedans. Cela revient à écrire cela (en mettant un alias) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT R.* 
    FROM dbo.aspnet_Roles AS R
    WHERE R.ApplicationID in (SELECT R.RoleId FROM dbo.aspnet_Applications WHERE applicationName = 'rouge')
    Dans ce cas l'exécution de la requête entière fonctionne mais pas la sous requête.

    ++

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Il n'y a pas de bug la dedans. Cela revient à écrire cela (en mettant un alias) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT R.* 
    FROM dbo.aspnet_Roles AS R
    WHERE R.ApplicationID in (SELECT R.RoleId FROM dbo.aspnet_Applications WHERE applicationName = 'rouge')
    Dans ce cas l'exécution de la requête entière fonctionne mais pas la sous requête.

    ++
    OK effectivement, je comprends mieux avec l'alias pourquoi cela fonctionne au niveau de la syntaxe T-SQL.
    Merci beaucoup de vos réponses.

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    D'où l'importance de toujours qualifier :

    - les objets (tables, vues, fonctions, procédures stockées) par le nom du schéma auquel ils appartiennent
    - le nom des colonnes par le nom de la table ou de la vue (ou par leur alias)

    @++

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

Discussions similaires

  1. [SQL server 2000] Détruire les dépendances d'une table
    Par Cyborg289 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/02/2006, 11h39
  2. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24
  3. Gros bug SQL Server avec caractère "²"
    Par Oluha dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 26/05/2005, 14h31
  4. [SQL Server] Passage d'un paramètre dans une procédure
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/01/2005, 13h19
  5. [SQL Server 8] Regrouper 2 requêtes en une ?
    Par Baquardie dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/06/2004, 22h22

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