2017-11-13 2 views
0

SQL Server 2008SQL SERVER 선택 목록의 요소 수가 최대 허용 개수 인 4096 개의 요소를 초과합니다.

나는 피벗을 수행하려고하는데 데이터가 있습니다.

으로 오류가 발생하는 아래의 코드를 실행 동안
The number of elements in the select list exceeds the maximum allowed number of 4096 elements. 

코드 : 내가 코드의 개별 세그먼트를 실행하면

DECLARE @Cols NVARCHAR(MAX); 
DECLARE @SQL NVARCHAR(MAX); 
DECLARE @Sel NVARCHAR(MAX); 
DECLARE @GENERIC NVARCHAR(MAX) 





SET @Cols = STUFF((SELECT distinct ',' + QUOTENAME([Description]) 
      FROM STAGING_TEMP 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,''); 
SET @Sel = STUFF((SELECT distinct ',' + QUOTENAME([Description]) + 
' AS DESC'+CAST(row_number() over (order by ([Description])) as varchar(250)) 
      FROM STAGING_TEMP 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,''); 



SET @SQL = N' 
SELECT DISTINCT [Generic Name], '+ @Sel+N' 
FROM STAGING_TEMP 
    pivot 
    (
     MAX(Description) For Description IN ('+ @Cols + N') 

    ) P'; 

EXECUTE(@SQL); 

나는 아래의 코드가 35K 중복 값을 가지고 40000 내림차순 값을 생성 알게 다른 DESC 그대로.

SET @Sel = STUFF((SELECT distinct ',' + QUOTENAME([Description]) + 
' AS DESC'+CAST(row_number() over (order by ([Description])) as varchar(250)) 
      FROM STAGING_TEMP 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,''); 

이러한 시나리오를 처리 할 수있는 방법이 있습니다. 제발 제안하십시오

답변

1

아니, 없습니다. SELECT 문의 최대 열 수는 4,096입니다 (here 참조).

IN 목록에는 각 값에 대한 열이 있습니다. 한 가지 문제를 해결하더라도 다른 문제 만 직면하게됩니다.

+0

설명 수가 가장 많은 일반 이름이 50이고 생성 방법이 DESC 40000 – akhrot

+0

설명의 수가 가장 많은 일반 이름은 50이고 다른 모든 일반 이름은 설명이 50 미만입니다 – akhrot

+0

@ akhrotk. . . 나는 당신이 다른 질문을 할 것을 제안합니다. 이것은 당신이 묻는 질문을 다루지 만 다른 문제가있는 것 같습니다. 총 설명 수가 4,096 개 이상인 것으로 추측합니다 - 단순화 된 샘플 데이터와 원하는 결과가 새로운 질문에 도움이됩니다. –