SQL-将所有数据收集到变量中

时间:2012-11-19 13:11:15

标签: sql sql-server

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

假设我有一个像select * from #temptable这样的选择命令。 它的回归:

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用XML

在没有动态SQL的情况下执行此操作
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查询的人来说,这可能会简化。

答案 1 :(得分: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)