[原创]SQL 把表中某一个列按照逗号拼接成一行

王朝学院·作者佚名  2016-05-26
窄屏简体版  字體: 小  |  中  |  大  |  超大  

[原创]SQL 把表中某一个列按照逗号拼接成一行在我们开发的过程中,难免遇到一种场景,把某个表中的的某个列的值拼接成用逗号隔开的一行数据

如图:我们把UserId列拼接成一行数据

-------》

为此我写了一个存储过程来解决此类问题。

-- Author: LHM -- Create date: 2015-01-15

-- Description: 把表中某一个列按照逗号拼接成一行 --示例: EXEC [Sp_TableToString] 'cast([UserId] as varchar)','[X_RoleUser]','RoleId=1'

-- ============================================= CREATE PROCEDURE [dbo].[Sp_TableToString] @ColumnName varchar(100), @TableName nvarchar(100), @Filter varchar(1000)='' AS BEGIN DECLARE @sql varchar(500) IF(@Filter<>'') BEGIN SET @Sql= ' SELECT Result= STUFF( ( SELECT '','' + '+@ColumnName+' FROM '+@TableName+ ' WHERE ' +@Filter+ ' FOR xml PATH('''') ), 1, 1, '''') ' END ELSE BEGIN SET @Sql= ' SELECT Result= STUFF( ( SELECT '','' + '+@ColumnName+' FROM '+@TableName+ ' FOR XML PATH('''') ), 1, 1, '''') ' END EXEC (@Sql) END

如果有兴趣的朋友可以建立测试表,一下提供建表语句

CREATE TABLE [dbo].[X_RoleUser]( [Id] [int] IDENTITY(1,1) NOT NULL, [RoleId] [int] NOT NULL, [UserId] [int] NOT NULL, [Company_Id] [int] NULL, CONSTRAINT [PK_X_RoleUser] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

GO

添加一些测试数据之后,然后执行存储过程 EXEC [Sp_TableToString] 'cast([UserId] as varchar)','[X_RoleUser]','RoleId=1' 就可以看到测试效果了。

在这有一个问题就是如果表中的要转换的字段不是字符串型的话,此时应该利用Cast函数把它转换成字符串型

希望给遇到此类需求的朋友带来帮助,谨此记录。

如果朋友们觉得以后可能会用到的话,欢迎转载,当然也可以推荐一下,谢谢。

PS:此博文是利用Windows Live Writer 2012编写,格式效果可能不太好。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航