2009-08-04 9 views
1

J'ai 2 requêtes similairesOPENQUERY donnant des résultats différents

select * 
from openquery(powerschool, 
       'select * 
       from TEACHERS 
       where teachernumber is not null 
        and schoolid=''1050'' 
        and teacherloginid is not null 
       order by teachernumber') 

et

SELECT * 
from openquery(powerschool, 
       'SELECT NVL(teachernumber,'''') 
       from TEACHERS 
       where teachernumber is not null 
       and schoolid=''1050'' 
       and teacherloginid is not null 
       order by teachernumber') 

Le premier est de me donner 182 lignes tandis que le second me donne 83.

Quel est le problème avec les requêtes?

Répondre

0

La deuxième requête ne retournerait jamais une valeur nulle pour la table des enseignants en raison de la NVL(), de sorte qu'elle pourrait renvoyer plus d'enregistrements en fonction des données.

fondamentalement "et teacherloginid est non nul" ne se fait frapper parce que vous remplacez les valeurs NULL avec des ""

+0

est la clause WHERE pas évalué avant la clause SELECT ... autre titre: NVL est evalauted après « teachernumber n'est pas nul » – gbn

+0

Je pense que quelqu'un modifié ces requêtes depuis que je commentais. La NVL n'était-elle pas dans la clause where à l'origine? – Jay

+0

Même si je supprime la NVL et que le "TeacherNumber n'est pas nul" dans la clause where, la deuxième requête me donne 83 lignes alors que la première renvoie 182 lignes. – Mithil

0

Juste pensées ...

  • même serveur? Autrement dit, le serveur lié est différent dans la cible ou les identifiants o vous lisez une autre table "TEACHERS"

  • Qu'est-ce que l'exécution des deux instructions SQL liées réellement sur le serveur lié (pas localement) vous donne?

Questions connexes