2008-09-17 5 views
1

J'ai une base de données DB2 distante à laquelle j'accède via ODBC. Quand j'ai une requête commePourquoi DB2 ne m'a-t-il pas laissé une colonne dans la clause WHERE?

SELECT t.foo, t.bar, t.problemcolumn 
FROM problemtable t 
WHERE t.bar < 60; 

cela fonctionne comme un charme, donc la table et les colonnes existent évidemment.

Mais si je spécifie la colonne de problème dans la clause WHERE

SELECT t.foo, t.bar, t.problemcolumn 
FROM problemtable t 
WHERE t.problemcolumn = 'x' 
AND t.bar < 60; 

il me donne une erreur

Table "problemtable" does not exist. 

Ce qui pourrait être la raison? J'ai vérifié deux fois l'orthographe et je peux déclencher le problème juste en incluant le problemcolumn dans la clause where.

+0

Veuillez publier le code SQL - votre erreur peut avoir supprimé l'erreur. – paxdiablo

Répondre

3

Désolé pour la réponse évidente, mais le problème existe-t-il? Votre code ressemble à du pseudo code à cause des noms de table/colonne, mais assurez-vous de vérifier votre orthographe. Ce n'est pas une vue qui pourrait même consister en des tables jointes entre différentes bases de données/serveurs?

+0

Oui, la première requête fonctionne et toutes les tables et colonnes existent et j'ai tous les droits nécessaires pour les lire. J'ai édité les questions pour essayer de clarifier cela. – Rowan

2

Quel est le code SQL réel que vous utilisez? Je ne vois rien de mal dans l'exemple que vous avez donné. Essayez de rechercher des virgules et/ou des citations mal placées qui pourraient déclencher l'erreur.

0

t-il avec juste:

SELECT t.foo, t.bar, t.problemcolumn 
FROM problemtable t 
WHERE t.problemcolumn = 'x' 
0

S'il vous plaît lancer la prochaine instructions SQL. Pour moi cela fonctionne bien. Si vous avez toujours cette erreur étrange, ce sera un bug DB2. J'ai eu quelques problèmes une fois avec le code de copie des éditeurs UNIX dans Windows et vice versa. Le SQL ne fonctionnerait pas, même si cela semblait correct. Retaper la déclaration a résolu mon problème alors.

créer la table problemtable ( foo varchar (10), bar int, problemcolumn varchar (10) );

SELECT t.foo, t.bar, t.problemcolumn DE problemtable t OÙ t.bar < 60;

SELECT t.foo, t.bar, t.problemcolumn DE problemtable t OÙ t.problemcolumn = 'x' ET t.bar < 60;

0

Il pense que cela devrait fonctionner dans DB2. Quel est votre logiciel font-ent?

0

DB2 provoque parfois des erreurs trompeuses. Vous pouvez essayer ces étapes de dépannage:

  1. Essayez d'exécuter le code par DBArtisan ou DB2 Control Center et voir si vous obtenez un résultat/erreur un message approprié .
  2. Essayez d'utiliser schema_name.problemtable au lieu de simplement problemtable
  3. Assurez-vous que problemcolumn est de le même type de données que vous la comparaison avec.
Questions connexes