2017-03-15 13 views
1

sqliteデータベースは、SQL Serverのリンクサーバーを介して接続しています。 次のクエリだけで正常に動作:sqliteに対してcount(*)を使用したオープンクエリを使用したSQLサーバ

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]' 
) 

エラーは次のとおりです。

The OLE DB provider "MSDASQL" for linked server "eod" supplied inconsistent metadata for a column. The column "cnt" (compile-time ordinal 1) of object "select COUNT(*) as cnt from [tdata]" was reported to have a "DBTYPE" of 129 at compile time and 3 at run time.

間違っている可能性が何とそれを修正する方法?

答えて

2

エラーメッセージのデータタイプは、問題を解決する手がかりを与えます。 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] 

かは場合には、32ビットの整数を選択する、明示的な戻り値の型をしてみてください「動作しない」マイクロソフトのもののさらに別の例

select cast(COUNT(*) as int) as cnt from [tdata] 

:フレームワークは、64ビット整数を扱うことができません。

+0

ありがとうございました。varcharが答えです。質問を投稿する前に、私はintにキャストしようとしました。運がない。再度、感謝します! –

関連する問題