2016-12-30 2 views
2

SQL Server 2016에서 저장 프로 시저가 있습니다. 이 SP에서 나는 다음과 같은 문장을 사용하여 연결된 서버 (PostgreSQL을)에서보기에서 모든 데이터를 얻으려면 :이처럼 사용하는 경우OPENQUERY "메모리 부족"오류 발생 : 모두로드 될 때까지 행 제한

INSERT INTO myTable 
SELECT Field1, 
    Field2, 
    Field3, 
    ... 
FROM OPENQUERY(myServer, 'SELECT * FROM myDatabase.mySchema.myView') 

을, 나는 몇 후 다음과 같은 오류 메시지가 받고 있어요 분 :

SELECT * FROM myDatabase.mySchema.myView ORDER BY Field1 LIMIT 1000000 

가 지금은 확실 WH 오전 :

Out of memory while reading tuples.

나는 괜찮 았는데 첫 번째 1,000,000 행을 얻을 수 OPENQUERYSELECT 문을 변경 모든 데이터를 얻는 가장 실질적인 방법이 될 것입니다. 처음 1000000 개의 행을 삽입 한 다음 OFFSET을 사용하여 다음 1000000을 삽입 할 수 있습니다. 그러나 행 수가 얼마나되는지 모르기 때문에 이것이 좋은 해결책이 될 것이라고 생각하지 않습니다. 루프는 다른 방법 일 수 있지만 이것이 내가 원하는 것을 성취 할 수있는 가장 쉬운 방법인지는 알 수 없습니다.

도움을 주시면 감사하겠습니다.

+0

보기에 기본 키가 있습니까? –

+0

@MitchWheat 안타깝게도 기본 키가없고보기에 고유 한 열이 없습니다. –

답변

1

나는 당신이 연결된 서버를 생성하기 위해 ODBC 드라이버를 사용하고 있다고 생각합니다. 이것은 psqlODBC 드라이버 메모리 구성과 관련된 문제입니다. 당신은

"옵션"섹션 "데이터 소스"

와 열린 창을 선택 열린 데이터 소스 세부 사항을 다음 데이터 소스

보도는 "구성"을 열고 ODBC 드라이버 설정을 변경

"use declare/fetch"를 체크하십시오.

enter image description here

+0

"ODBC 드라이버 용 Microsoft OLE DB 공급자"를 사용하여 연결합니다. 그러나 연결된 서버에서 psqlODBC 설정을 변경할 수는 없습니다. –

+0

ODBC 데이터 원본을 만들었습니까? 거기에 DNS 서버를 추가하면 속성을 찾을 수 있습니다 .. –

+0

too added –

관련 문제