【发布时间】:2013-10-16 10:12:18
【问题描述】:
我正在尝试使用 SQL (SQL Server 2008) 生成数据透视表。为了获得列列表,我使用了 stuff 函数,如果我们将它与 SQL 一起使用,它会非常有用。
虽然由于 Pivot 结构的动态特性(由用户选择),但我想将列名设置为变量。我可以捕捉到正确的 SQL Stuff 语法,但无法执行它。有什么想法吗?
查看代码示例如下: 工作代码:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Station)
from #ResultCrosstab
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
Select @cols
以下代码无效
Declare @ColumnName varchar(100)
set @ColumnName='Station'
DECLARE @cols1 AS NVARCHAR(MAX)
DECLARE @queryCol AS NVARCHAR(MAX)
set @queryCol='STUFF((SELECT distinct '','' + QUOTENAME(' + @ColumnName + ')
from #ResultCrosstab
FOR XML PATH(''), TYPE
).value(''.'', ''NVARCHAR(MAX)'')
,1,1,'''')'
Select @queryCol
Select @cols1=(@queryCol)
Not Working code 返回 sql 查询本身而不是结果。
有什么想法或建议吗?
干杯 哈迪普
【问题讨论】:
-
我看不到您在哪里执行查询。我错过了什么吗?
-
我不知道为什么人们经常将这种构造逗号分隔值字符串的方式称为 /a
STUFF方法。您是否知道STUFF所做的只是将,从FOR XML PATH生成的文本中剪掉。
标签: sql sql-server-2008-r2 sql-function