用于连接表的行的存储过程

时间:2014-09-02 00:52:56

标签: sql sql-server stored-procedures

我有一个名为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

返回正确的结果,但是如果我进行了更改,我显然无法一个接一个地运行它,因为临时表已经创建了。

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

任何帮助都会受到赞赏或链接到类似的东西,因为我所有的搜索都没有达到我想要的目的。

1 个答案:

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