使用sqlite ODBC driver执行ATTACH后SELECT无结果的问题求助
SQLite ODBC驱动ATTACH后执行SELECT的问题解决
问题背景
我使用sqlite ODBC驱动,想通过ATTACH语句关联两个数据库来获取联合数据。但执行SQL语句attach 'my.db' as mydb; select 1时,驱动没有返回任何数据;而执行select 2;attach 'my.db' as mydb; select 1时,驱动正确提示“仅允许一条SQL语句”。查看驱动源码发现有个checkddl()函数用来分析请求是否包含DDL语句,想问下有没有人成功用这个驱动在ATTACH之后执行SELECT?
可行解决方案
有不少开发者遇到过相同问题,最稳妥的解决方式是拆分语句分别执行:
- 第一步单独执行DDL语句:
attach 'my.db' as mydb;,这一步驱动会完成数据库挂载,虽然无数据返回,但操作已生效; - 第二步单独执行查询语句:
select 1;,此时就能正常获取查询结果。
问题原因
该ODBC驱动的checkddl()函数会将ATTACH判定为DDL操作。当DDL语句与SELECT语句写在同一条请求中时,驱动仅会处理DDL部分,不会执行后续的SELECT,也不会抛出错误;但如果SELECT语句在前、DDL语句在后,驱动会直接检测到多语句违规并报错。
另外,也可以尝试升级到驱动的最新版本,部分后续更新可能优化了多语句的处理逻辑,但拆分执行是兼容性最好的方案。
内容的提问来源于stack exchange,提问作者Uriel
相关产品推荐
相关产品推荐

