查询解释
此查询旨在从表中创建逗号分隔列表,它利用 FOR XML PATH 函数构造包含所需值的 XML 片段。它使用子查询来获取指定部门的员工姓名 (ename),然后用逗号替换 XML 片段中的空格。
SELECT E1.deptno, allemp = Replace ((SELECT E2.ename AS 'data()' FROM emp AS e2 WHERE e1.deptno = e2.DEPTNO FOR xml PATH('')), ' ', ', ') FROM EMP AS e1 GROUP BY DEPTNO;
FOR XML PATH 的工作原理
FOR XML PATH('') 根据指定的列(在本例中为 ename)为 emp 表中的每一行生成一个 XML 片段。假设有一个简单的员工表:
<code>EmployeeID Name 1 John Smith 2 Jane Doe</code>
以下查询将创建 XML:
SELECT EmployeeID, Name FROM emp.Employee FOR XML PATH ('Employee');
输出:
<employee><employeeid>1</employeeid><name>John Smith</name></employee><employee><employeeid>2</employeeid><name>Jane Doe</name></employee>
错误处理和替代方案
提供的查询尝试使用 data() 作为 XML 标签,这是无效的,会导致错误。为了避免这种情况,可以使用以下修改后的查询:
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;
此查询确保在子查询中不创建任何 XML 标记,并且它还通过在子查询中添加逗号来处理包含空格的名称。
以上是如何使用查询从 SQL Server 表生成逗号分隔的列表?的详细内容。更多信息请关注PHP中文网其他相关文章!