Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membuat Senarai Terhad Koma dalam Pelayan SQL Menggunakan 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!