【问题标题】:FreeTDS ODBC error "The identifier that starts with ... is too long. Maximum length is 128."FreeTDS ODBC 错误“以 ... 开头的标识符太长。最大长度为 128。”
【发布时间】:2018-08-05 09:40:20
【问题描述】:

我一直在使用 pyodbc 和免费 TDS 向 microsoft SQL-2012 提交查询而没有问题,但最近偶然发现了一个问题。 当我提交更长的查询时,我收到一条错误消息,指出其中一个标识符太长并且脚本崩溃。 完全相同的查询在管理工作室中有效,甚至不返回警告。 我已将以下内容添加到我的代码中,但无济于事。

SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON

错误所指的代码在这里:

(ZR_KOPF.ZRK_DDP_B IN ('190/TEMP.AA1H', '190/RAIN.AA1H', '190/WDR.AA1H', '190/WSP.AA1H', '190/SD1.AA1H', '190/HUMID.AA1H', '190/NO2.AA1H', '190/PM10.AA1H', '190/PM2.5.AA1H', '190/SO2.AA1H', '190/OZONE.AA1H', '190/CO.AA1H', '206/TEMP.AA1H', '206/RAIN.AA1H', '206/WDR.AA1H', '206/WSP.AA1H', '206/SD1.AA1H', '206/HUMID.AA1H', '206/NO2.AA1H', '206/PM10.AA1H', '206/PM2.5.AA1H', '206/SO2.AA1H', '206/OZONE.AA1H', '206/CO.AA1H')) AND ZR_KOPF.ZRK_BASEPRODUCTION = 1)

我得到的错误是:

pyodbc.ProgrammingError: ('42000', "[42000] [FreeTDS][SQL Server]The identifier that starts with ''190/TEMP.AA1H', '190/RAIN.AA1H', '190/WDR.AA1H', '190/WSP.AA1H', '190/SD1.AA1H', '190/HUMID.AA1H', '190/NO2.AA1H', '190/PM10.AA' is too long. Maximum length is 128. (103) (SQLExecDirectW)")

Pyodbc 版本:4.0.18b1 freetds 版本:1.00.48

任何帮助将不胜感激 干杯!

【问题讨论】:

  • 在这种情况下,发布堆栈跟踪和 exact 错误消息通常会有所帮助。请edit您的问题相应。 pyodbc 和 FreeTDS 的版本也很有趣。
  • 如果您能发布更多代码将会很有帮助。看起来您只发布了查询的 WHERE 子句,但可以看到更多上下文...
  • 我无法使用代码 here 重现您对 pyodbc 4.0.18 和 FreeTDS 1.00.48 的问题。一定有其他事情发生。使用我的示例尝试创建可以说明问题的minimal reproducible exampleedit 您的问题以显示您的重现代码及其产生的输出。
  • 当我用双引号(“)附加数据时,我也遇到了同样的问题。但是当我附加单引号(')时。现在它工作正常,

标签: sql sql-server-2012 pyodbc freetds unixodbc


【解决方案1】:

因此,列表中每个项目之间的空格造成了很大的不同...... 我删除了它们,查询顺利进行。 谢谢各位的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多