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

如图:我们把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编写,格式效果可能不太好。

[原创]SQL 把表中某一个列按照逗号拼接成一行的更多相关文章

  1. [原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式

    我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ------> 从左边图转换成右边图,像这种需求,我们难免 ...

  2. mysql 把表中某一列的内容合并为一行

    1,把表中某一列的内容合并为一行 select province,CONCAT('[\"全部\",\"',GROUP_CONCAT(city ORDER BY cityI ...

  3. oracle数据库将一列的值拼接成一行,并且各个值之间用逗号隔开

    使用场景:把某一列值转换为逗号分隔的字符串 例子:比如查询所有的的表空间如下,现在要获得所有的表空间用逗号分隔的字符串(比如rman duplicate的时候skip表空间) SQL> sele ...

  4. SQL 把表中字段存储的逗号隔开内容转换成列表形式

    原文:[原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式 我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ...

  5. SQL将一个表中的某一列值全部插入到另一个表中

    1.  SQL将一个表中的某一列值全部插入到另一个表中 插入的话: insert into a(col) select col from b; 更新的话: update a set col=selec ...

  6. 在一个SQL Server表中的多个列找出最大值

    在一个SQL Server表中一行的多个列找出最大值 有时候我们需要从多个相同的列里(这些列的数据类型相同)找出最大的那个值,并显示 这里给出一个例子 IF (OBJECT_ID('tempdb..# ...

  7. SQL中 将同一个表中的A列更新到B列,B列更新到A列

    有网友在SKYPE问及,如标题,SQL中 将同一个表中的A列更新到B列,B列更新到A列. 其实这个不是问题,直接写更新语句即可,可以参考下面动画演示: SQL source code: CREATE ...

  8. sql将一个表中的数据插入到另一个表中

    sql将一个表中的数据插入到另一个表中 列名不一定要相同,只要你在HH中列出要插入列的列表跟select   from   mm表中的选择的列的列表一一对应就可以了,当然两边的数据类型应该是兼容的.  ...

  9. 在数据表中添加一个字段的SQL语句怎么写

    如果要在数据表中添加一个字段,应该如何表示呢?下面就为您介绍表添加字段的SQL语句的写法,希望可以让您对SQL语句有更深的认识.   通用式: alter table [表名] add [字段名] 字 ...

随机推荐

  1. android 电池(三):android电池系统【转】

    本文转载自:http://blog.csdn.net/xubin341719/article/details/8709838 一.电池系统结构 Android中的电池使用方式主要有三种:AC.USB. ...

  2. LINQ 学习路程 -- 查询操作 Skip SkipWhile Take TakeWhile

    Method Description Skip 跳过序列中指定数量元素,然后返回剩余序列 SkipWhile 只要满足条件,就跳过序列中的元素,然后返回剩余函数 Take 从序列的开头返回指定数量的连 ...

  3. 算法(Algorithms)第4版 练习 1.5.24

    package com.qiusongde; import edu.princeton.cs.algs4.StdOut; public class Exercise1524 { public stat ...

  4. hdu 2041 超级楼梯(简单dp)

    超级楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. Hibernate学习---第十二节:Hibernate之锁机制&乐观锁实现

    1.悲观锁 它指的是对数据被外界修改保持保守态度,因些,在整个数据处理过程中,将数据牌锁定状态.悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层的锁机制才能保证数据访问的排他性,否则,即使在本 ...

  6. mySQL 5.7版 解决密码登录失败Access denied for user 'root'@'localhost' (us

    mySQL 5.7版 解决密码登录失败Access denied for user 'root'@'localhost' (us             2016-03-05              ...

  7. 防止未登录用户操作—struts2拦截器简单实现(转)

    原文地址:http://blog.csdn.net/zhutulang/article/details/38351629 尊重原创,请访问原地址 一般,我们的web应用都是只有在用户登录之后才允许操作 ...

  8. Centos7搭建Mysql-5.6.38,及主从复制。

    Server1:192.168.1.189  (主) Server2:192.168.1.190  (从) 1.关闭默认的firewalld防火墙,安装iptables. systemctl disa ...

  9. Python基础-MD5加密

    import hashlibm = hashlib.md5()#构造一个md5 m.update(b"Hello")#加密前必须转化成二进制字节类型print(m.hexdiges ...

  10. 我对java的理解(一)——注解就是贴标签

    在现实生活中,贴标签这种现象比比皆是.去超市,去商场,每个或者每类物品都会有它的标签,甚至在我们自己身上也会有标签,比如,程序猿.逗逼.单身狗.80/90后.屌丝……呵呵,太多了.有时候,我们也会戏谑 ...