Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membuat Senarai Terhad Koma dalam Pelayan SQL Menggunakan FOR XML PATH?

Bagaimana untuk Membuat Senarai Terhad Koma dalam Pelayan SQL Menggunakan FOR XML PATH?

DDD
DDDasal
2025-01-18 10:27:10612semak imbas

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

Gunakan FOR XML PATH untuk mencipta senarai dipisahkan koma dalam SQL Server

Contoh ini menunjukkan cara menggunakan FOR XML PATH untuk membuat senarai yang dipisahkan koma daripada jadual:

<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>

Penjelasan terperinci:

Inti pertanyaan ini ialah bagaimana FOR XML PATH mengendalikan XML sebenar. Pertimbangkan jadual pekerja yang dipermudahkan:

<code>EmployeeID      Name
1               John Smith
2               Jane Doe</code>

FOR XML PATH Tukar data kepada format XML. Jalankan pertanyaan berikut:

<code class="language-sql">SELECT  EmployeeID, Name
FROM    emp.Employee
FOR XML PATH ('Employee')</code>

akan menjana XML berikut:

<code class="language-xml"><employee><employeeid>1</employeeid><name>John Smith</name></employee><employee><employeeid>2</employeeid><name>Jane Doe</name></employee></code>

Mengabaikan elemen 'Pekerja' daripada klausa PATH mengalih keluar teg XML luaran. Pertanyaan yang diubah suai:

<code class="language-sql">SELECT  Name
FROM    Employee
FOR XML PATH ('')</code>

akan menjana:

<code class="language-xml"><name>John Smith</name><name>Jane Doe</name></code>

Dalam pertanyaan asal, alias lajur 'data()' mencetuskan ralat apabila cuba mencipta teg XML yang tidak sah. Untuk menyelesaikan masalah ini, subkueri berkorelasi menyembunyikan ralat, jalur label dan menjana teks biasa.

<code class="language-sql">SELECT  Name AS [Data()]
FROM    Employee
FOR XML PATH ('')</code>

Akhir sekali, REPLACE menggantikan ruang dalam senarai dengan koma.

Pertanyaan yang dipertingkatkan:

Walau bagaimanapun, pertanyaan yang dipertingkatkan berikut adalah lebih baik:

<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>

Pertanyaan ini menggunakan STUFF untuk mengalih keluar koma dan ruang pertama, mengelakkan ralat apabila nama mengandungi ruang. Mengeluarkan alias lajur menghalang teg XML daripada dibuat.

Nota lain:

Untuk melepaskan aksara XML khas, gunakan .value dalam kombinasi dengan 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>

Atas ialah kandungan terperinci Bagaimana untuk Membuat Senarai Terhad Koma dalam Pelayan SQL Menggunakan FOR XML PATH?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn