ODBC 错误"Column x in table y has value exceeding its max length or precision"



当使用ODBC运行以下查询时,我从Progress数据库中得到这个错误:

SELECT distinct Table.column,
        { fn CONVERT(SUBSTRING(Table.ProblematicColumn, 1, 60), SQL_VARCHAR)} as test
FROM PUB.Table
WHERE ( Table.id IN (
            SELECT Table.id
             FROM PUB.Table
            ) ) 

我知道有可能使用DBTools来修复它。但是,我对多个客户机的多个Progress数据库运行查询,因此每次都这样做是不实际的。而且,由于某种原因,我使用的ODBC客户机(PHP)在发生这种情况时没有显示任何错误。相反,它返回一个空结果。

转换为60个字符的VAR_CHAR确实有帮助,直到我添加了子查询。当子查询存在时,我再次得到相同的错误。

有趣的是,当"distinct"不存在时,它是有效的。但我确实需要不同的。

编辑:问题是我如何执行这个查询没有固定的宽度列与DBTool。

我花了几分钟才找到答案。问题似乎是在OE10 SQL代理中没有处理where子句中的子选择。对我来说,使用内部连接到子选择的替代方案看起来是等效的。我测试过了,确实有效。替换SQL客户端将不做任何事情,错误发生在OpenEdge SQL代理中:我使用OpenEdge JDBC驱动程序得到相同的错误。

SELECT distinct Table.column,
   { fn CONVERT(SUBSTRING(Table.ProblematicColumn, 1, 60), SQL_VARCHAR)} as test
FROM PUB.Table inner join (select id from PUB.Table) t2 on Table.id = t2.id

升级到OE 11.6.

在11.6中有一些选项可以自动和静默地截断数据,这样你就不会得到一个错误。

"Autonomous Schema Update"

https://community.progress.com/community_groups/openedge_rdbms/f/18/t/19534

相关内容

最新更新