【问题标题】:Query that loop between columns and select the column name查询列之间的循环并选择列名
【发布时间】:2018-08-13 09:32:03
【问题描述】:

我想每次使用一个不同的列执行多次相同的查询并打印列名。

换句话说,我想执行以下操作:

第一次查询

SELECT DISTINCT [Name],[C12],'C12' AS [Description]
FROM #MyTable

第二次查询

SELECT DISTINCT [Name],[C13],'C13' AS [Description]
FROM #MyTable

第三次查询

SELECT DISTINCT [Name],[C14],'C14' AS [Description]
FROM #MyTable

从现在开始我所做的是以下代码:

DECLARE @Member AS VARCHAR(20)
DECLARE Csr cursor for SELECT 'C12' UNION SELECT 'C13' UNION SELECT 'C14'
OPEN Csr
    FETCH NEXT FROM Csr INTO @Member
    WHILE (@@fetch_status <> -1)

    BEGIN
        exec('SELECT DISTINCT [Name],'+@Member+', ''+@Member+'' AS [Description]
                    FROM #MyTable
            ')
        FETCH NEXT FROM Csr INTO @Member
    END
CLOSE Csr
DEALLOCATE Csr

这接近预期的结果,但我得到的是 Description

+@会员+

而不是每次迭代分配给变量的值。

有人可以帮帮我吗?

【问题讨论】:

    标签: sql-server while-loop sql-server-2012 cursor exec


    【解决方案1】:

    不需要游标,用动态SQL就可以轻松完成:

    declare @query nvarchar(400) = ''
    select @query = @query + ' select name,''' + name + ''',' + name + ' from #MyTable'  from tempdb.sys.columns
    where object_id = (
        select object_id from tempdb.sys.tables
        where name like '#MyTable%'
    ) and name <> 'name'
    
    execute sp_executesql @query
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 2020-04-11
      • 2014-12-07
      • 2014-10-13
      • 1970-01-01
      相关资源
      最近更新 更多