Sql server 2005 有关SQL Server 2005 CTE和XML路径(“”)使用的问题

Sql server 2005 有关SQL Server 2005 CTE和XML路径(“”)使用的问题,sql-server-2005,common-table-expression,Sql Server 2005,Common Table Expression,我已经通过CTE生成了月份号,并尝试生成如下输出 1,2,3,…30,31通过使用for xml,但我得到一个错误 这是我的完整剧本 ;With CTEMonth As (Select 1 As Number Union All Select m.Number + 1 As Number From CTEMonth m Where m.Number <=30) DECLARE @cols AS NVARCHAR(MAX) select @cols = STUFF((SELECT

我已经通过CTE生成了月份号,并尝试生成如下输出 1,2,3,…30,31通过使用for xml,但我得到一个错误

这是我的完整剧本

;With CTEMonth As 
(Select 1 As Number
Union All
Select m.Number + 1 As Number
From CTEMonth m
Where m.Number <=30)  

DECLARE @cols AS NVARCHAR(MAX)
select @cols = STUFF((SELECT  ',' + m.Number
                    from CTEMonth m 
                    order by m.Number
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
print @cols

我的SQL有什么问题?请导游。谢谢

您需要在CTE之前将DECLARE移动到


此外,递归CTE并不是生成集合的最有效方法-请参阅,并了解更好的替代方法,如数字表或日历表。

因此,请举例说明生成数字集合的最佳方法。thanks@Thomas你没有在我提供的链接中看到任何示例吗?请先提供!请给我们完整的错误信息-毕竟,我们既看不到你的屏幕,也看不懂你的心思-所以你需要告诉我们发生了什么。。。。
DECLARE @cols AS NVARCHAR(MAX);

;With CTEMonth As 
(Select 1 As Number
Union All
Select m.Number + 1 As Number
From CTEMonth m
Where m.Number <=30)  
select @cols = STUFF((SELECT  ',' + m.Number
                    from CTEMonth m 
                    order by m.Number
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'');

print @cols;