Sql server 2008 透视动态查询并将结果存储到表

Sql server 2008 透视动态查询并将结果存储到表,sql-server-2008,dynamic,pivot,Sql Server 2008,Dynamic,Pivot,我有一个列数不同的动态查询。我想将结果存储到一个表中以便进一步处理 我添加了一个insert into子句来将结果存储到一个表中,但是我得到了一个语法错误 Msg 102, Level 15, State 1, Line 14 Incorrect syntax near ')' 我正在使用MS SQL server management studio 2008 R2 我的问题是: IF OBJECT_ID('TEMPDB..#datesTemp') IS NOT NULL BEGIN D

我有一个列数不同的动态查询。我想将结果存储到一个表中以便进一步处理

我添加了一个insert into子句来将结果存储到一个表中,但是我得到了一个语法错误

Msg 102, Level 15, State 1, Line 14 Incorrect syntax near ')'
我正在使用MS SQL server management studio 2008 R2

我的问题是:

 IF OBJECT_ID('TEMPDB..#datesTemp') IS NOT NULL BEGIN   DROP TABLE #datesTemp END 
 DECLARE @cols AS NVARCHAR(MAX),
    @colNames AS NVARCHAR(MAX),
    @query AS NVARCHAR(MAX),
    @startDate datetime

SET @startDate = '2005-01-01'

;with dates as
(
  select @startdate datelist, 1 sp
  union all
  select dateadd(month, 1, datelist), sp+1
  from dates
  where sp+1 <= 122 -- change this number 5 to the number of months you need
)
select   sp,
  CONVERT(VARCHAR(7), datelist, 120) as MONTHANDYEAR 
into #datesTemp
from dates 
option (maxrecursion 122)

select @cols = STUFF((SELECT ',' + QUOTENAME(monthandyear) 
                    from #datesTemp
                    group by monthandyear, sp
                    order by sp
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

select @colNames = STUFF((SELECT  ', isnull(' + QUOTENAME(monthandyear)+', 0) as '+QUOTENAME(monthandyear)
                    from #datesTemp
                    group by monthandyear, sp
                    order by sp
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
,1,1,'')


set @query = 'select * into recmonth_temp from 
            (SELECT FIPS, DATA_TYPE,' + @colNames + ' 
             from 
             (
                select FIPS, DATA_TYPE,REC_MONTH, TOTAL_RECORDS 
                from REPORTING.DBO.APEX_CUMULATIVE_SUMMARY_ALL_STAGING_NEW A join member1.dbo.fipscode F
                on a.fips = f.fipscode

            ) x
            pivot 
            (
                sum(TOTAL_RECORDS)
                for REC_MONTH in (' + @cols + ')
            ) p) '

execute(@query)

您收到的语法错误是什么?哦,对不起…语法错误-Msg 102,级别15,状态1,第14行附近的语法不正确。您在最后一个错误之后缺少别名。你需要给所有的子查询和派生表都加上别名。我自己经过几次尝试后就知道了。非常感谢你的帮助。非常感谢。