Verwenden Sie FOR XML PATH, um eine durch Kommas getrennte Liste in SQL Server zu erstellen
Dieses Beispiel zeigt, wie Sie mit FOR XML PATH
eine durch Kommas getrennte Liste aus einer Tabelle erstellen:
<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>
Detaillierte Erklärung:
Der Kern dieser Abfrage ist, wie FOR XML PATH
mit dem eigentlichen XML umgeht. Betrachten Sie eine vereinfachte Mitarbeitertabelle:
<code>EmployeeID Name 1 John Smith 2 Jane Doe</code>
FOR XML PATH
Konvertieren Sie Daten in das XML-Format. Führen Sie die folgende Abfrage aus:
<code class="language-sql">SELECT EmployeeID, Name FROM emp.Employee FOR XML PATH ('Employee')</code>
generiert das folgende XML:
<code class="language-xml"><employee><employeeid>1</employeeid><name>John Smith</name></employee><employee><employeeid>2</employeeid><name>Jane Doe</name></employee></code>
Durch Weglassen des Elements „Employee“ in der PATH-Klausel wird das externe XML-Tag entfernt. Geänderte Abfrage:
<code class="language-sql">SELECT Name FROM Employee FOR XML PATH ('')</code>
generiert:
<code class="language-xml"><name>John Smith</name><name>Jane Doe</name></code>
In der ursprünglichen Abfrage löste der Spaltenalias „data()“ einen Fehler aus, als versucht wurde, ein ungültiges XML-Tag zu erstellen. Um dieses Problem zu lösen, verbergen korrelierte Unterabfragen Fehler, entfernen Beschriftungen und generieren Klartext.
<code class="language-sql">SELECT Name AS [Data()] FROM Employee FOR XML PATH ('')</code>
Abschließend ersetzt REPLACE
Leerzeichen in der Liste durch Kommas.
Verbesserte Abfrage:
Die folgende verbesserte Abfrage ist jedoch vorzuziehen:
<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>
Diese Abfrage verwendet STUFF
, um das erste Komma und Leerzeichen zu entfernen und so Fehler zu vermeiden, wenn der Name Leerzeichen enthält. Durch das Weglassen von Spaltenaliasen wird die Erstellung von XML-Tags verhindert.
Weitere Hinweise:
Um spezielle XML-Zeichen zu maskieren, verwenden Sie .value
in Kombination mit FOR XML PATH
:
<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>
Das obige ist der detaillierte Inhalt vonWie erstelle ich durch Kommas getrennte Listen in SQL Server mit FOR XML PATH?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!