您的位置:首页 > 数据库

SQL 合并行,返回带分隔字符的字符串

2010-05-05 16:13 337 查看
开发中,我们可能需要将同一个字段对应多行的值以字符串形式输出.并且用分隔符分隔各行的值.
T_Student 表

Stud_ID
Sex
Name
1

Tom
2

Anne
3

Jack
4

Mike
执行:
--declare @out nvarchar(100)
--exec proUniteRow 'T_Student','Name','Sex=男','_',',','Stud_ID asc',@out output
--print @out
--结果:_Tom,_Jack,_Mike

方法:

--合并行,并返回合并的值

Create proc [dbo].[proUniteRow]
@tab varchar(30), --表名
@col varchar(30), --合并的列名
@where varchar(2000), --合并的条件
@firstSplit varchar(100), --连接字符前缀
@lastSplit varchar(100), --连接字符后缀
@order varchar(100), --排序
@val nvarchar(2000)='' output –返回值
as
begin
declare @sql nvarchar(2000)
set @sql='
declare @retStr varchar(2000)
set @retStr=''''
declare cur cursor
read_only
for select
'+@col+' from '+@tab
if len(@where)>0
set @sql=@sql+' where '+@where

if len(@order)>0
set @sql=@sql+' order by '+@order

set @sql=@sql+'
declare @str varchar(2000)
open cur
fetch next from cur into @str
while (@@fetch_status =0)
begin
set @retStr=@retStr+'''+@firstSplit+'''+@str+'''+@lastSplit+'''
fetch next from cur into @str
end
close cur
deallocate cur
if len(@retStr)>0
set @strEnd=substring(@retStr,1,len(@retStr)-1)
'
exec sp_executesql @sql,N'@strEnd nvarchar(2000) output',@val output
end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐