数据表列值转换为逗号分隔字符串

在开发sql server语序中,可能需要这样一个要求,把表中某一列的所有值转换为使用逗号分隔的字符串去呈现出来。

举个例子:

 

if object_id('tempdb..#temptable') is not null
begin
 drop table #temptable
end

create table #temptable ([id] int not null,[category] nvarchar(40) null)

insert into #temptable ([id],[category]) values (1,'table'),
                                                (2,'view'),
                                                (3,'store procedure'),
                                                (4,'table-valued function'),
                                                (5,'scalar-valued function'),
                                                (6,'user-defined table type')

select [id],[category] from #temptable

go

 

要求结果,[id]或[category]任意一列,呈现如下:

 

日后,我们不清楚是哪一张表,哪一个字段。

因此,可以写成一个动态的sql 存储过程来处理:

 

set ansi_nulls on
go
set quoted_identifier on
go
-- =============================================
-- author:      insus.net
-- create date: 2019-05-11
-- update date: 2019-05-11
-- description: 列值转换为逗号分隔字符串
-- =============================================
create procedure [dbo].[usp_tablecolumnvaluetocommadelimitedstring] (
    @tablename sysname, 
    @columnname    sysname,
    @returnvalue nvarchar(max) output
)    
as
begin        
    declare @sql nvarchar(max) = n'
    declare @temporary_table as table([multirow_comma-delimited_string] nvarchar(max))
    insert into @temporary_table ([multirow_comma-delimited_string])
    select top(1) stuff(
                        replace(
                        rtrim(
                                (select ''|'' + cast('+ @columnname +' as nvarchar(max)) from '+ @tablename +' for xml path('''') )
                            ),
                    ''|'','', ''),
                        1,1,'''') from '+ @tablename +'
    select @returnvalue = [multirow_comma-delimited_string] from @temporary_table'

execute sp_executesql @sql,
                      n'@returnvalue nvarchar(max) output',
                      @returnvalue output

end

 

只要为上面存储过程传入表名,字段名等参数即可得到我们想要的结果:

 

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐