2017-10-25 1 views
-1

데이터를 가져 오는 동안 내가 일괄 처리를 실행하는 동안 오류가 발생했습니다. 오류 메시지는 다음과 같습니다. 던져졌다 'System.OutOfMemoryException'형식의 예외 ".

을 6000 만 개 데이터를 하나 개의 테이블 (SQL 서버 2014) 얻고있다"오류가있는 동안 발생 일괄 처리를 실행합니다. 오류 메시지는 다음과 같습니다.?. 유형의 예외 'System.OutOfMemoryException'이 발생했다 "

이 중 하나가 여기에 도와주세요 수

+0

이 오류가 발생하는 코드를 표시 할 수 있습니까? – Wndrr

+0

select * from tablename –

+0

절대로 SELECT * FROM tablename .. 할 WHERE 절이 있습니까? 근본적으로 전체 테이블을 당겨 내려고합니다. – Patrick

답변

0

System.OutOfMemoryException 당신이 메모리에 너무 많은 데이터를로드하려고한다는 것을 의미 당신은 필요 . 각 요청의 부하가 적은 데이터 당신은 행의 수를 반환 제한하는 결과 또는 TOP 절을 필터링 할 WHERE 절을 사용할 수 있습니다

TOP의 :.

SELECT TOP 1000 * FROM tablename 
WHERE

예 :

SELECT * FROM tablename WHERE ID < 500 

결국 당신이 정말로 당신의 테이블에있는 모든 행을로드해야 할 경우 페이징 시스템을 사용해야합니다. 즉, TOP으로 반환되는 행 수를 제한하고 모든 "페이지"에 대해 주어진 양의 행을 "건너 뜁니다".

SQL Server에서 페이징에 대한 소개는 this page을 참조하십시오. * 후 값이 1000 * currentPageCount

같은 현재 페이지를 나타내는 동적 값으로 대체 할 것 실제 예에서

// page 0 
SELECT TOP 1000 * FROM tablename 
// page 1 
SELECT TOP 1000 * FROM tablename WHERE ID > 1000 * 1 
// page 2 
SELECT TOP 1000 * FROM tablename WHERE ID > 1000 * 2 
// page 5 
SELECT TOP 1000 * FROM tablename WHERE ID > 1000 * 5 

: 여기

은 증분 연속 ID 정책이 가정 일반적인 페이징 예입니다
0

SQL Management Studio를 닫았다가 다시 열고 확인하십시오. Mine은 너무 오랫동안 열어 두거나 작은 쿼리 창을 너무 많이 열어두면 작은 쿼리에서도 때때로 이렇게합니다.

관련 문제