需要将动态SQL的结果转换为变量

时间:2016-09-07 09:21:10

标签: sql-server

我想要做的是在变量@var中获取查询的“单值结果”。查询的输出不是记录集,而是单个字符串值。数据应该看起来像这样的东西“伦敦,诺丁汉,伯明翰,曼彻斯特,利兹,布莱克浦.......”

Declare @Var nvarchar(MAX)
Declare @DynamicSQL nvarchar(MAX)

BEGIN
    SET @DynamicSQL = 'SELECT   [CityName] from [TempTable]'
    print @DynamicSQL
END

exec sp_executesql @DynamicSQL, N'@Var nvarchar(max) out', @Var out

select @Var
-- Returns String : 'Null'
-- Expected Result: 'London,Nottingham,Birmingham,Manchester,Leeds,Blackpool'

2 个答案:

答案 0 :(得分:0)

您需要在sql语句中设置输出变量,如下所示:

SET @DynamicSQL = 'SELECT @Var = [CityName] from [TempTable]'

答案 1 :(得分:0)

首先,您需要将CityName的返回值写入动态SQL语句中的变量@var

'SELECT   @var = [CityName] from [TempTable]'

结果将是CityName列的最后一行,因为该变量已被其他行覆盖:

enter image description here

因此,要连接行,您需要将下一行结果添加到每行的变量中,并在其间添加逗号。这就是你如何做到的:

'SELECT   @var = [CityName] + @var + '','' from [TempTable]'

然后在你的输出中你需要删除字符串中的所有空格:

-- remove empty spaces
set @Var = REPLACE(@Var,' ','')

-- remove last comma
set @Var = LEFT(@Var,LEN(@Var)-1)

select @Var

结果应如下所示:

enter image description here