SQL SERVER选择列表中的元素数超过了允许的最大数量4096个元素

时间:2017-11-13 12:45:03

标签: sql-server tsql dynamic-sql

SQL SERVER 2008

我有一个数据,我正在尝试转轴。 运行以下代码遇到错误

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);

当我运行单个代码段时,我开始知道下面的代码产生40000 desc值,它具有35k重复值AS Different 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 个答案:

答案 0 :(得分:2)

不,没有。 SELECT语句中的最大列数为4,096(请参阅here)。

IN列表中的每个值都有一列。即使你解决了一个问题,你也只会面对另一个问题。