Heim > Datenbank > MySQL-Tutorial > Wie erstelle ich durch Kommas getrennte Listen in SQL Server mit FOR XML PATH?

Wie erstelle ich durch Kommas getrennte Listen in SQL Server mit FOR XML PATH?

DDD
Freigeben: 2025-01-18 10:27:10
Original
609 Leute haben es durchsucht

How to Create Comma-Delimited Lists in SQL Server Using FOR XML PATH?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

generiert:

<code class="language-xml"><name>John Smith</name><name>Jane Doe</name></code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage