SQL拼接字段数据

查询语句:

SELECT 
STUFF
(
    (
        SELECT 
        ',' + --分隔符 
     KeyID --查询字段 FROM #tmp --查询数据表 WITH(NOLOCK) WHERE 1=1 --查询条件 FOR XML PATH('') ), 1,-- 0:NULL 1:原样输出 2++:首位添加分隔符 1,-- N:截取 N - Len 的字符 ''-- 在字符串首尾添加的符号 )

测试语句:

IF EXISTS(SELECT * FROM tempdb..sysobjects where id=object_id('tempdb..#tmp')) --判断临时表【#tmp】是否存在
BEGIN
    DROP TABLE #tmp  --删除临时表
END


CREATE TABLE #tmp --创建临时表
(
    KeyID VARCHAR(36),
    KeyValue VARCHAR(max)
)

--项临时表插入测试数据
INSERT INTO #tmp VALUES(newid(),'数据一')
INSERT INTO #tmp VALUES(newid(),'数据二')

--查询语句

--单个字段
SELECT 
STUFF
(
    (
        SELECT 
        ',' + --分隔符
        KeyID --查询字段
        FROM #tmp --查询数据表
        WITH(NOLOCK) 
        WHERE 1=1 --查询条件
        FOR XML PATH('')
    ),
    1,-- 0:NULL 1:原样输出 2++:首位添加分隔符
    1,-- N:截取 N - Len 的字符
    ''-- 在字符串首尾添加的符号
)

/*--多字段组合
SELECT 
STUFF
(
    (
        SELECT 
        ',KeyID:'+ KeyID + ';KeyValue:' + KeyValue --查询字段
        FROM #tmp --查询数据表
        WITH(NOLOCK) 
        WHERE 1=1 --查询条件
        FOR XML PATH('')
    ),
    1,-- 0:NULL 1:原样输出 2++:首位添加分隔符
    1,-- N:截取 N - Len 的字符
    ''-- 在字符串首尾添加的符号
)
*/

 查询结果(注:具体结果由自动生成的KeyID决定):

  1、单字段:

    1B0EC911-5C2B-4FDE-87BB-62981DE2030D,0527DF18-9EDD-484D-B770-B24B13C68CA1

  2、多字段组合:

    KeyID:33C28B1E-3F75-4119-A944-1DB7541088E0;KeyValue:数据一,

    KeyID:4ECF1696-7DB6-43C7-8182-22EEF676E2CF;KeyValue:数据二

 说明:

  1、数据库表与临时表查询方式一样,替换表和字段即可,谢谢。

完美,只是因为简单。
原文地址:https://www.cnblogs.com/jschar/p/6142055.html