Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL动态列_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

SQL动态列

SQL动态列,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在尝试创建动态列并将其插入到临时表中。 但它抛出一个错误,指出#temp3不是有效的对象名。如果我不尝试将动态生成的列插入到表中,代码就会工作 如果执行代码,然后尝试访问#temp3表,如: select @cols = STUFF((SELECT ',' + QUOTENAME(grade) from #temp group by grade

我正在尝试创建动态列并将其插入到临时表中。
但它抛出一个错误,指出#temp3不是有效的对象名。如果我不尝试将动态生成的列插入到表中,代码就会工作

如果执行代码,然后尝试访问
#temp3
表,如:

 select @cols =

                STUFF((SELECT ',' + QUOTENAME(grade)         
                from #temp        
                group by grade        

        FOR XML PATH(''), TYPE        
        ).value('.', 'NVARCHAR(MAX)')         
    ,1,1,'')        

  select @colsRollup = STUFF((SELECT ', Sum(' + QUOTENAME(grade) + ') as '+QUOTENAME     (grade)        
                from #temp       
                group by grade        

        FOR XML PATH(''), TYPE        
        ).value('.', 'NVARCHAR(MAX)')         
    ,1,1,'')    

  set @query    

      =      'SELECT * into #temp3 from 
             (
              SELECT lob as "Vertical", '+ @colsRollup + '       
              FROM        
                  (        
                    SELECT lob,' + @cols + ' from         
                        (        
                         select lob,        
                           grade,        
                           asso_count        
                           from #temp        
                         ) x         
                     pivot         
                          (        
                           count(grade)        
                           for grade in (' + @cols + ')        
                           ) p         
                  ) x1 
                    GROUP BY lob with ROLLUP)x2'        

         execute(@query) 
我认为它已经超出了范围,这可以解释错误消息。 您可以尝试修改查询以包含
SELECT
,如:

execute(@query)
select * from #temp3
注意最后一行现在是如何包含
;选择*FROM#temp3


如果您添加,您应该返回结果,如果这是您想要的。

mysql或sql server?选择一个并编辑标记。(看起来像sql server)@prasanthunnikrishnan您是如何执行此操作的?以存储过程或其他方式?@jpw:Yup,它作为存储过程执行。
SET @query = '
 SELECT * INTO #temp3 FROM
   (
   SELECT lob as "Vertical", '+ @colsRollup + '       
   FROM        
     (        
      SELECT lob,' + @cols + ' from (select lob, grade, asso_count from #temp) x
      PIVOT (count(grade) for grade in (' + @cols + ')) p         
      ) x1 
      GROUP BY lob with ROLLUP
     ) x2; SELECT * FROM #temp3'