【问题标题】:SQL Stuff Function with Variable in SQL ServerSQL Server 中带变量的 SQL 填充函数
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2013-06-02
    相关资源
    最近更新 更多