2014-09-02 64 views
0

我有一个名为name的表,它非常小,只存储名称和年龄。连接表的行的存储过程

Name Age 
------------- 
Alex  3 
Laura 2 
Kate  2 
Max  3 

我需要编写一个存储过程,可以将此表的行连接到一个字符串中。我见过很多例子,但没有一个真正帮助我。

该字符串需要返回为“Alex,3; Laura,2; Kate,2; Max,3;”。

我想出一个简单的方法来做到这一点会加入列一,添加逗号,然后将结果保存到一个临时表中,以备以后使用:

select Name + ',' + cast(Age as varchar(3)) as both 
into #temptable 
from NameAge 

然后,我将加入每一行,并与分号分隔:

DECLARE @Names VARCHAR(8000) 
SELECT @Names = COALESCE(@Names + ';', '') + both FROM #temptable 
SELECT @Names 

它返回正确的结果,但我显然不能,如果我做出改变,因为临时表已创建运行一前一后。

我基本上需要在存储过程中使用这些语句,但是我在这样做时遇到了一些麻烦。

任何帮助将不胜感激或链接到类似的东西,因为我所有的搜索没有出现相当我正在寻找。

回答

2
select 
    stuff((select ';' + Name + ',' + convert(varchar(255), Age) 
       from [name] 
       for xml path(N''), type).value(N'.[1]', N'nvarchar(max)') 
      ,1, 1, '') 

或使用你原来的解决方案:

DECLARE @Names VARCHAR(8000) 
SELECT @Names = COALESCE(@Names + ';', '') + Name + ',' + cast(Age as varchar(3)) FROM [name] 
SELECT @Names