Heim >Datenbank >MySQL-Tutorial >Wie erstelle ich durch Kommas getrennte Listen aus SQL Server-Tabellen mithilfe von Abfragen?
Erklärung der Abfrage
Diese Abfrage dient zum Erstellen einer durch Kommas getrennten Liste aus einer Tabelle. Sie verwendet die Funktion FOR XML PATH, um ein XML-Fragment zu erstellen, das die erforderlichen Werte enthält. Es verwendet eine Unterabfrage, um den Mitarbeiternamen (ename) für eine bestimmte Abteilung abzurufen, und ersetzt dann die Leerzeichen im XML-Fragment durch Kommas.
<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>
So funktioniert FOR XML PATH
FOR XML PATH('') generiert ein XML-Fragment für jede Zeile in der emp-Tabelle basierend auf der angegebenen Spalte (in diesem Fall ename). Angenommen, es gibt eine einfache Mitarbeitertabelle:
<code>EmployeeID Name 1 John Smith 2 Jane Doe</code>
Die folgende Abfrage erstellt XML:
<code class="language-sql">SELECT EmployeeID, Name FROM emp.Employee FOR XML PATH ('Employee');</code>
Ausgabe:
<code class="language-xml"><employee><employeeid>1</employeeid><name>John Smith</name></employee><employee><employeeid>2</employeeid><name>Jane Doe</name></employee></code>
Fehlerbehandlung und Alternativen
Die bereitgestellte Abfrage versucht, data() als XML-Tag zu verwenden, was ungültig ist und zu einem Fehler führt. Um dies zu vermeiden, können Sie die folgende modifizierte Abfrage verwenden:
<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 stellt sicher, dass in der Unterabfrage keine XML-Tags erstellt werden, und verarbeitet auch Namen, die Leerzeichen enthalten, indem sie in der Unterabfrage Kommas hinzufügt.
Das obige ist der detaillierte Inhalt vonWie erstelle ich durch Kommas getrennte Listen aus SQL Server-Tabellen mithilfe von Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!