1

我有一个通过 ODBC 访问的远程 DB2 数据库。当我有类似的查询时

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

它就像一个魅力,所以表和列显然存在。

但是如果我在 WHERE 子句中指定问题列

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

它给了我一个错误

Table "problemtable" does not exist.

这可能是什么原因?我已经仔细检查了拼写,我可以通过在 where 子句中包含问题列来触发问题。

4

6 回答 6

3

很抱歉答案很明显,但问题是否存在?由于表/列名称,您的代码看起来像伪代码,但请务必仔细检查您的拼写。这不是一个视图,它甚至可能包含跨不同数据库/服务器的连接表?

于 2008-09-17T11:11:07.090 回答
2

您使用的实际 SQL 是什么?我认为您提出的示例没有任何问题。尝试查找可能触发错误的错位逗号和/或引号。

于 2008-09-17T11:31:23.487 回答
0

请运行下一条 SQL 语句。对我来说,它工作正常。如果您仍然有这个奇怪的错误,那将是一个 DB2 错误。我曾经在将代码从 UNIX 编辑器复制到 Windows 时遇到了一些问题,反之亦然。SQL 不会运行,虽然它看起来没问题。重新输入语句解决了我的问题。

创建表问题表( foo varchar(10)、bar int、problemcolumn varchar(10) );

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

从问题表 t 中选择 t.foo、t.bar、t.problemcolumn,其中 t.problemcolumn = 'x' AND t.bar < 60;

于 2008-09-18T15:16:06.153 回答
0

It think it should be work in DB2. What is your font-ent software?

于 2008-10-02T16:32:50.667 回答
0

它是否仅适用于:

SELECT t.foo, t.bar, t.problemcolumn
FROM problemtable t
WHERE t.problemcolumn = 'x'
于 2008-09-17T11:49:39.900 回答
0

DB2 有时会给出误导性错误。您可以尝试以下故障排除步骤:

  1. 尝试通过 DBArtisan 或 DB2 Control Center 执行代码,看看是否得到正确的结果/错误消息。
  2. 尝试使用 schema_name.problemtable 而不仅仅是 problemtable
  3. 确保问题列的数据类型与您要与之比较的数据类型相同。
于 2009-07-10T04:22:20.193 回答