3

我正在尝试使用 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 代码返回 sql 查询本身而不是结果。

有什么想法或建议吗?

哈迪普干杯

4

1 回答 1

2

执行查询而不是选择它。 Select @queryCol将返回的值@queryCol

Select @cols1=(@queryCol)将值@queryCol放入@cols1

您将需要EXEC SP_EXECUTESQL(@queryCol)EXEC(@queryCol)执行实际查询

于 2013-10-16T10:41:56.213 回答