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

开发中,我们可能需要将同一个字段对应多行的值以字符串形式输出.并且用分隔符分隔各行的值.

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 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值