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