我在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”为列提供了不一致的元数据。对象“从[tdata]中选择COUNT(*)作为cnt”的列“cnt”(编译时序号1)报告在编译时具有129的“DBTYPE”,在运行时具有3个。
可能有什么问题以及如何解决?
答案 0 :(得分:4)
错误消息中的数据类型提供了解决问题的线索。来自Microsoft doc:
DBTYPE_I4 = 3, A four-byte, signed integer: LONG
DBTYPE_STR = 129, A null-terminated ANSI/DBCS character string
无论出于何种原因,在编译时,假定查询返回一个字符串。
尝试按照预期返回一个字符串(符合quirk通常是解决方案的最快路径):
select cast(COUNT(*) as varchar(20)) as cnt from [tdata]
或尝试显式返回类型,如果框架无法处理64位整数,则选择32位整数:
select cast(COUNT(*) as int) as cnt from [tdata]
微软的另一个例子是“不工作”。