SSIS中ADO.NET Source用QODBC查询QuickBooks数据的SQL命令错误
解决SSIS中QODBC驱动查询QuickBooks TimeModified字段的问题
问题分析
QODBC驱动对DBTIMESTAMP类型字段的筛选语法有特殊要求,普通字符串格式的时间无法被正确解析,从而触发Expected Lexical Element Not Found错误。
解决方案
1. 使用ODBC标准时间戳字面量格式
直接采用ODBC通用的时间戳语法{ts 'yyyy-MM-dd HH:mm:ss'}替换普通时间字符串,示例查询:
SELECT * FROM Item WHERE TimeModified >= {ts '2022-12-21 13:16:34'}
该格式是QODBC原生支持的时间戳写法,能被驱动直接解析。
2. 使用SSIS参数化查询(推荐)
如果需要通过变量动态传入筛选时间,参数化查询可以彻底规避格式匹配问题:
- 在ADO.NET Source编辑器中,选择“SQL command”并输入带参数的查询语句:
SELECT * FROM Item WHERE TimeModified >= ? - 点击右侧“参数”按钮,将SSIS中
DateTime类型的变量映射到该参数,驱动会自动完成类型转换,无需手动拼接时间字符串。
3. 确认驱动运行环境
由于使用32位QODBC驱动,需确保SSIS项目以32位模式运行:
- 右键SSIS项目 → 属性 → 配置属性 → 调试 → 将
Run64BitRuntime设置为False。
内容的提问来源于stack exchange,提问作者Coda759
相关产品推荐
相关产品推荐

