sqlite - 使用SQL对sqlite使用count(*)的openquery的SQL服务器

标签 sqlite sql-server-2012 openquery

我有通过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/

相关文章:

javascript - 如何使用 JavaScript 创建多个 SQlite 表?

c# - 你能说出为什么 DapperExtensions Update 方法执行失败吗?

sql - 将表附加到现有表 : SQL Server

sql - 需要帮助编写数据透视查询以从不同的选择语句中选择列

SQL Server十进制变量分配?

sql - 从 Openquery 中删除

java - 使用 SQLite 进行简单的数学计算 - Android

javascript - phonegap 中的数据库 View

sql-server - 在 sql 存储过程中使用 OPENQUERY 的原因是什么?