1

我需要将所有返回数据收集到使用逗号分隔的变量中。

假设我有一个选择命令,例如:select * from #temptable。它的回报:

Field1|Field2
-------------
Value1|Value2

预期结果:@testvariable 保存值:'Value1','Value2'

在这张表上,它们可能有 2 列,我需要将所有返回结果存储到一个变量中。我们可以很容易地收集一个值,例如:select @var=column1 from #temptable.但我需要存储所有。这里的问题是,列的数量可以变化。意思是,列数和列名是从另一个查询生成的。所以,我不能提及字段名称。我需要一种动态的方式来做到这一点。在这张桌子上只有一行会被返回。提前致谢。

4

2 回答 2

1

您可以在没有动态 SQL 的情况下使用XML

DECLARE @xml XML = (SELECT * FROM #temptable FOR XML PATH(''))

SELECT stuff((SELECT ',' + node.value('.', 'varchar(100)')
              FROM   @xml.nodes('/*') AS T(node)
              FOR XML PATH(''), type).value('.','varchar(max)')
              , 1, 1, ''); 

这可能由比我更擅长 XML 查询的人来简化。

于 2012-11-19T13:35:46.510 回答
0

由于您的列名是动态的,所以首先您必须将列名作为逗号分隔在变量中,然后可以使用EXEC()

例如 :-

  //making comma seperated column names from table B
     DECLARE @var varchar(1000)=SELECT SUBSTRING(
        (SELECT ',' + Colnames 
        FROM TABLEB
        ORDER BY Colnames 
        FOR XML PATH('')),2,200000)
  //Execute the sql statement   
        EXEC('select '+@var+' from tableA')

如果要获取执行 sql 语句后返回的值,则可以使用 sp_executesql (Transact-SQL)

于 2012-11-19T13:32:42.513 回答