2010-12-15 5 views
1

다음과 같이 연결된 서버에 쿼리해야합니다. SQL : OPENQUERY 모든 행을 반환하지 않음

그것은 일반적으로 대부분의 데이터를 반환하지만 일부 행이 누락

('TABLEA SELECT * FROM'DWH_LINK)

OPENQUERY로부터 * 을 선택?

linkeds 서버는 오라클 클라이언트

이 사람이/OPENQUERY 승 발생했습니다 문제인가에서 오는?

+0

은 굉장 – Bill

답변

0

이것은 기본 공급자 기능과 관련이있는 것으로 보이며 다른 공급자도 이와 비슷한 크기/행 제한을 가지고 있습니다. 한 가지 가능한 해결 방법은 일정량의 행을 가져 오기 위해 내장 된 필터링을 사용하여 반복/반복 쿼리를 구현하는 것입니다. 오라클과 함께, 나는 이것이 rownum (oracle에 친숙하지 않다)을 사용했을지도 모른다라고 생각한다.

그래서

--Not tested sql, just winging it syntax-wise 
SELECT * FROM OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA where rownum between 0 AND 500') 
SELECT * FROM OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA where rownum between 500 AND 1000') 
SELECT * FROM OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA where rownum ...') 

BOL과 같은 : link 이것은 OLE DB 공급자의 기능이 적용됩니다. 쿼리가 여러 결과 집합을 반환 할 수 있지만 OPENQUERY는 첫 번째 결과 집합 만 반환합니다.

3

나는 정확히 같은 문제가있었습니다.

근본 원인은 OLE DB 대신 ODBC를 사용하여 연결된 서버를 설정했기 때문입니다. 여기

내가 그것을 해결 방법은 다음과 같습니다 "... 새 연결된 서버"

  • 는 SQL 서버
  • 오른쪽 "연결된 서버"폴더를 클릭하고 선택에서 연결된 서버를 삭제
  • 연결된 서버 : 입력 anything..this는
    • 제공자 새 연결된 서버의 이름이됩니다 : "OLE DB 오라클 Provider"를 선택
    • 제품 이름 : 이중 Q없이 "오라클"(입력 uotes)
    • 데이터 원본 : TNSNAMES.ORA 파일의 별칭을 입력하십시오. 내 경우, (따옴표없이) "ABC.WORLD"
    • 공급자 문자열했다 : 그것은 빈
    • 카탈로그 떠나 : 그것은 빈
    • 위치 남겨두고 그 빈

"보안"탭으로 이동하여 "이 보안 컨텍스트를 사용하여 만들어야합니다."라는 마지막 라디오 버튼을 클릭하고 사용자 이름 &을 입력하십시오.

그래야합니다!

+0

을 OPENQUERY 사용하는 것보다 다른 연결된 서버의 데이터에 액세스하는 또 다른 방법이있다 -이 내 정확하게 문제였다. 나는 ODBC 드라이버가 이와 같은 오류를 범할 것이라고 믿을 수 없다. 그러나 그 경우 였고 이제는 수정되었다. – SqlRyan

+0

우리는 또한 이것에 부딪쳤다. 그리고 이것은 해결책이었다. 우리의 초기 혼란에 추가하기 위해 SELECT *가 출품 한 FETCH FIRST 동작은 WHERE 절이 7 개의 열 중 3 개를 사용했을 때 나타났습니다 ... 다른 4 개를 사용하거나 WHERE없이 실행하면 예상 된 결과가 반환되었습니다. –

+0

** OLE DB ** 용 ** Oracle Provider로 전환 (ODBC 드라이버 용 Microsoft OLE DB 공급자에서)이 작동했습니다. 감사. x64 -> (64 비트 ODAC (Oracle Data Access Components) 다운로드)를 SQL 서버와 일치 시키십시오. 감사. – Finkel

0

Oracle 10 인스턴트 클라이언트 및 ODBC를 사용하여 이와 동일한 문제가 발생했습니다. Oracle 10gR2 데이터베이스에 연결할 때이 클라이언트를 사용했습니다.Microsoft 지원 티켓을 열었고 Oracle 11 인스턴트 클라이언트를 사용할 것을 제안했습니다. 놀람! 10g 인스턴트 클라이언트를 제거하고 11g 인스턴트 클라이언트를 설치 한 다음 재부팅하면 문제가 해결되었습니다.

관련 문제