查詢解釋
此查詢旨在從表中建立逗號分隔列表,它利用 FOR XML PATH 函數建構包含所需值的 XML 片段。它使用子查詢來取得指定部門的員工姓名 (ename),然後用逗號取代 XML 片段中的空格。
<code class="language-sql">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; </code>
FOR XML PATH 的工作原理
FOR XML PATH('') 根據指定的欄位(在本例中為 ename)為 emp 表中的每一行產生一個 XML 片段。假設有一個簡單的員工表:
<code>EmployeeID Name 1 John Smith 2 Jane Doe</code>
以下查詢將建立 XML:
<code class="language-sql">SELECT EmployeeID, Name FROM emp.Employee FOR XML PATH ('Employee');</code>
輸出:
<code class="language-xml"><employee><employeeid>1</employeeid><name>John Smith</name></employee><employee><employeeid>2</employeeid><name>Jane Doe</name></employee></code>
錯誤處理與替代方案
提供的查詢嘗試使用 data() 作為 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 標記,並且它還透過在子查詢中新增逗號來處理包含空格的名稱。
以上是如何使用查詢從 SQL Server 資料表產生逗號分隔的清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!