You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server:将多行地址行合并为单行逗号分隔字符串

如何将关联表的多行地址行合并为逗号分隔字符串

你当前的SQL语句返回带XML标签结果的原因是:子查询中同时选择了两个独立列(, 和adrline.AddressLine),FOR XML PATH('')会将每个列用对应的列名作为XML标签包裹输出。要得到纯逗号分隔的字符串,可以通过以下两种方式修改:

方法一:直接拼接字符串(适用于无特殊字符的场景)

将子查询中的分隔符与地址行拼接成单个字符串输出,避免生成XML标签:

SELECT
    STUFF((SELECT ', ' + adrline.AddressLine
           FROM AddressLine AS adrline
           WHERE adr.Id = adrline.AddressId
           FOR XML PATH('')), 1, 2, '') AS AddressLine
FROM 
    Address AS adr

方法二:使用TYPE和VALUE提取纯文本(适用于含特殊字符的场景)

如果地址行中包含&、<、>等XML特殊字符,第一种方法会对这些字符进行转义(比如&变成&amp;)。此时可以通过TYPE和value()方法提取纯文本并自动反转义:

SELECT
    STUFF((SELECT ', ' + adrline.AddressLine
           FROM AddressLine AS adrline
           WHERE adr.Id = adrline.AddressId
           FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS AddressLine
FROM 
    Address AS adr

关键逻辑说明

  • FOR XML PATH(''):指定生成无根节点的XML结构
  • TYPE:将子查询结果转为XML类型,为后续提取纯文本做准备
  • .value('.', 'NVARCHAR(MAX)'):提取XML节点的所有文本内容,转为字符串类型
  • STUFF(..., 1, 2, ''):移除结果开头多余的,

内容的提问来源于stack exchange,提问作者xeraphim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 00:45:33