我有通过SQL Server中的链接服务器连接的sqlite数据库。
以下查询工作正常:
select *
from openquery(
eod,
'select id, min(dt) as mindt, max(dt) as maxdt from [tdata] group by id'
)
但是此查询返回错误:
select *
from openquery(
eod,
'select COUNT(*) as cnt from [tdata]'
)
错误是:
链接服务器“ eod”的OLE DB提供程序“ MSDASQL”为列提供了不一致的元数据。据报告,对象“选择COUNT(*)作为[tdata]的cnt”的“ cnt”列(编译时顺序1)在编译时的DBTYPE为129,在运行时的DBTYPE为3。
可能有什么问题以及如何解决?
最佳答案
错误消息中的数据类型提供了解决问题的线索。从Microsoft doc:
DBTYPE_I4 = 3, A four-byte, signed integer: LONG
DBTYPE_STR = 129, A null-terminated ANSI/DBCS character string
无论出于何种原因,都假定在编译时查询返回一个字符串。
尝试返回期望的字符串(遵循怪癖通常是解决方案的最快途径):
select cast(COUNT(*) as varchar(20)) as cnt from [tdata]
或尝试使用显式的返回类型,在框架无法处理64位整数的情况下选择32位整数:
select cast(COUNT(*) as int) as cnt from [tdata]
微软的另一个例子“不起作用”。
关于sqlite - 使用SQL对sqlite使用count(*)的openquery的SQL服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42822099/