【发布时间】: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 example 和edit 您的问题以显示您的重现代码及其产生的输出。
-
当我用双引号(“)附加数据时,我也遇到了同样的问题。但是当我附加单引号(')时。现在它工作正常,
标签: sql sql-server-2012 pyodbc freetds unixodbc