1

这是我们尝试在 Windows 系统上通过 IBM Informix ODBC 驱动程序在 SQLRunner 内部运行的查询。数据库本身托管在其他地方。

SELECT keycolumnA AS 'Entity', datacol1, datacol2 WHERE keycolumnA IN ('ABC', 'DE f')

查询因“ODBC 错误”而失败

但是,如果我们从Entity中删除引号,则查询有效,但列名以小写形式返回。重要的是,第一列作为带有大写 E 的实体返回。

我们尝试将连接字符串设置为“DSN=myDSN; DELIMIDENT=y;” 没有成功。

设置:IBM Informix 驱动程序版本:Windows 2003 上的 3.7。

4

1 回答 1

1

要成为分隔标识符,名称必须使用双引号,而不是单引号。因此,在显示连接字符串的情况下,编写如下所示的查询“应该”工作(著名的遗言):

SELECT keycolumnA AS "Entity", datacol1, datacol2
  FROM RandomlyNamedTable   -- NB: Not present in original query!
 WHERE keycolumnA IN ('ABC', 'DE f');

在包含名为 Elements 的表(存储有关元素表的数据)的数据库上进行测试:

 SELECT Atomic_Number AS "Entity", Name AS Name, Symbol AS "Symbol"
  FROM Elements   -- NB: Not present in original query!
 WHERE Symbol IN ('Fe', 'He');

Entity  | name      | Symbol
INTEGER | CHAR(20)  | CHAR(3)
26      | Iron      | Fe
2       | Helium    | He

请注意,名称“实体”和“符号”根据您的需要大写。双引号换成单引号后查询失败

SELECT Atomic_Number AS 'Entity', Name AS Name, Symbol AS 'Symbol'
  FROM Elements   -- NB: Not present in original query!
 WHERE Symbol IN ('Fe', 'He');
SQL -201: A syntax error has occurred.

这是设置了 DELIMIDENT...没有设置 DELIMIDENT,“显示标签”周围的单引号和双引号都因语法错误而失败。

在 Mac OS X 10.7.5 上针对 IBM Informix Dynamic Server 11.70.FC2 进行测试。(程序是使用 ESQL/C 编写的,但这应该无关紧要。)

于 2012-10-12T17:27:19.783 回答