2010-04-27 3 views
0
StringBuilder query = new StringBuilder(); 
        query.Append("CREATE TABLE #Codes (Code nvarchar(100) collate database_default) "); 
        query.Append("Insert into #Codes (Code) "); 
        int lengthOfCodesArray = targetCodes.Length; 
        for (int index = 0; index < lengthOfCodesArray; index++) 
        { 
         string targetCode = targetCodes[index]; 
         query.Append("Select N'" + targetCode + "' "); 
         if (index != lengthOfCodesArray - 1) 
         { 
          query.Append("Union All "); 
         } 
        } 
    query.Append("drop table #Codes "); 

를 만들 때이 쿼리를 실행할 충분한 시스템 메모리가 : cmd.ExecuteReader()는 내가에 임시 테이블

를 얻을 임시 테이블을 만들 때이 쿼리를 실행하기위한 메모리가 부족하여 시스템입니다

But weird thing is that, when I have 25k codes is ok, when 5k I get this error. 

초기 크기는 262MB입니다. 각 코드의

lengt 기반으로 주사기 Z- 추적 injection.Size이 하나 거대한 문을 생성 (15)

+0

이 코드 조각은 무엇을해야합니까? –

+0

이 테이블을 사용하여 다른 사람과 가입하고 있지만이 코드를 표시 할 수는 없습니다. 그러나 이제 나는 너에게 보여준이 계명을 시험해 보았다. – user278618

답변

1

평균적으로, 물론 결국 실패합니다.

적어도 최적화 할 때까지 INSERT 한 번에 하나씩 (UNION ALL)해야합니다.

귀하의 궁극적 인 답변에 BULK INSERT이 포함될 것이라는 생각이 들지만, 귀하의 신청서에 대해 충분히 알지 못합니다.

+0

Pinalkumar Dave는 나를위한 권위이며 다른 방식으로 주장합니다 : http://blog.sqlauthority.com/2009/03/11/sql-server-difference-between-union-vs-union-all-optimal- 성능 비교/ – user278618

+0

대량 삽입이 허용되지 않습니다. – user278618

+1

XML을 사용할 수 있습니까? 모든 코드를 XML 문서로 SQL Server에 전달한 다음 XML 데이터 형식과 해당 메서드를 사용하여 테이블을 삽입 할 수 있습니다. 그래도 BULK INSERT보다 효율적이지 못합니다. –