在 SQL Server 中生成逗号分隔的列表
本指南说明如何从 SQL Server 表创建逗号分隔列表。 这些方法利用 FOR XML PATH
和 STUFF
来高效生成列表。
理解方法
核心技术结合了 FOR XML PATH('')
将数据提取为字符串(没有 XML 标签)和 STUFF
用逗号替换空格。 然而,这种方法有局限性。
原始查询细分:
原始方法使用FOR XML PATH('')
来获取字符串形式的数据。 data()
别名虽然看起来是一个 XML 元素,但却是一种解决方法,它会在 XML 生成期间产生错误,随后由外部查询处理。 这种错误处理不太理想。
改进的查询:
下面提出了更强大的解决方案:
<code class="language-sql">SELECT E1.deptno, STUFF((SELECT ', ' + E2.ename FROM emp AS E2 WHERE E1.deptno = E2.DEPTNO FOR XML PATH('')), 1, 2, '') FROM EMP AS E1 GROUP BY DEPTNO;</code>
这种改进的查询直接用逗号连接值,消除了容易出错的 XML 解决方法。
高级 XML 处理:
为了防止特殊 XML 字符的潜在问题,请使用 .value
进行更安全的 XML 处理:
<code class="language-sql">SELECT E1.deptno, STUFF((SELECT ', ' + E2.ename FROM emp AS E2 WHERE E1.deptno = E2.DEPTNO FOR XML PATH(''), TYPE) .value('.', 'NVARCHAR(MAX)'), 1, 2, '') FROM EMP AS E1 GROUP BY DEPTNO;</code>
这个最终查询提供了在 SQL Server 中生成逗号分隔列表的最可靠方法,从而减少了潜在的 XML 相关错误。 .value('.', 'NVARCHAR(MAX)')
将 XML 输出显式转换为字符串,确保兼容性并防止意外行为。
以上是如何在 SQL Server 中高效创建逗号分隔列表?的详细内容。更多信息请关注PHP中文网其他相关文章!