我需要使用逗号分隔将所有返回数据收集到变量中。
假设我有一个像select * from #temptable
这样的选择命令。
它的回归:
Field1|Field2
-------------
Value1|Value2
预期结果:@testvariable保持值:'Value1','Value2'
在这个表上,它们可能有2列,我需要将所有返回结果存储到单个变量中。我们可以很容易地收集单个值,如:select @var=column1 from #temptable.
但我需要存储所有。问题是,列的数量可以变化。从另一个查询生成列的平均值,列数和列名。所以,我不能提到字段名称。我需要一种动态方式来完成它。在这个表上只返回一行。提前致谢。
答案 0 :(得分:1)
您可以使用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查询的人来说,这可能会简化。
答案 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)