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

如图:我们把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. iOS UITableViewCell UITableVIewController 纯代码开发

    iOS UITableViewCell UITableVIewController 纯代码开发 <原创> .纯代码 自定义UITableViewCell 直接上代码 ////// #imp ...

  2. 《程序员代码面试指南》第三章 二叉树问题 遍历二叉树的神级方法 morris

    题目 遍历二叉树的神级方法 morris java代码 package com.lizhouwei.chapter3; /** * @Description:遍历二叉树的神级方法 morris * @ ...

  3. H5 input默认数字键盘,显示为密码格式

    <P> <span class="yzname w25">银行密码</span> <input class="j_passwor ...

  4. Android 4.4 U盘挂载【转】

    本文转载自:https://blog.csdn.net/mill_li/article/details/50134301 在Android4.4系统下,ES文件浏览器读取不到U盘,但是在设置-> ...

  5. Windows下Nginx的启动、停止等命令添加

    Windows下Nginx的启动.停止等命令在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动.停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍.1.启动 ...

  6. QT 巧用QSignalMapper分类有序地处理大量信号

    转自--> http://blog.csdn.net/cuteqt/article/details/4306900 QSignalMapper这个类并不是个新鲜概念, 早在Qt2里就已经存在, ...

  7. c# ListBox

    1. ListBox用法(http://www.cnblogs.com/chinahbzm/articles/3577285.html) 2. ListBox使用(http://www.cnblogs ...

  8. 基于zepto使用swipe.js制作轮播图demo

    在移动web开发中,由于手机界面较小,为了能展示更多的图片经常使用轮播图并且还需要考虑到手机流量的问题,通过请教他人以及百度,个人感觉swipe.js比较好用 它是一个纯javascript工具,不需 ...

  9. git内部原理-第一篇

    本人计划写一些关于<git内部原理>的文章 计划每周一篇

  10. Agc010_D Decrementing

    今天本人因调了上篇博客的题而脑壳不适,不想颓题,因此有了这篇博客. 但是博客毕竟得讲点什么,想想有没有什么代码短的. 哦,好像有,就Agc010_D Decrementing好了. Alice和Bob ...