在 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中文網其他相關文章!