2017-03-15 15 views
1

sqlite 데이터베이스가 SQL Server의 연결된 서버를 통해 연결되어 있습니다. 다음 쿼리는 잘 작동합니다 :sqlite에 대해 개수 (*)를 사용하는 openquery가 포함 된 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로 캐스팅을 시도했습니다. 불운. 다시 한 번 감사드립니다! –