Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggabungkan Rentetan dengan Cekap daripada Berbilang Baris dalam Pelayan SQL Tanpa Fungsi CLR?
Penggabungan Rentetan Berprestasi Tinggi dalam Pelayan SQL: Melangkaui Had CLR
Mengagregatkan rentetan daripada berbilang baris ke dalam rentetan tunggal ialah tugas SQL Server yang kerap. Walaupun kaedah seperti COALESCE
dan FOR XML PATH
wujud, mereka sering gagal dari segi kecekapan. Ini benar terutamanya dalam SQL Azure, yang tidak mempunyai sokongan untuk fungsi CLR, menghapuskan penyelesaian berprestasi tinggi biasa.
Alternatif Berkesan: Pendekatan CTE Rekursif
Alternatif yang teguh dan cekap memanfaatkan Ungkapan Jadual Biasa (CTE) rekursif. Teknik ini melibatkan langkah-langkah utama ini:
Kaedah ini menjamin hasil yang konsisten melalui pengumpulan dan pengisihan yang jelas.
Pelaksanaan Praktikal:
Berikut ialah contoh pelaksanaan menggunakan CTE rekursif:
<code class="language-sql">WITH Partitioned AS ( SELECT ID, Name, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) AS NameNumber, COUNT(*) OVER (PARTITION BY ID) AS NameCount FROM dbo.SourceTable ), Concatenated AS ( SELECT ID, CAST(Name AS nvarchar(max)) AS FullName, Name, NameNumber, NameCount FROM Partitioned WHERE NameNumber = 1 UNION ALL SELECT P.ID, CAST(C.FullName + ', ' + P.Name AS nvarchar(max)), P.Name, P.NameNumber, P.NameCount FROM Partitioned AS P INNER JOIN Concatenated AS C ON P.ID = C.ID AND P.NameNumber = C.NameNumber + 1 ) SELECT ID, FullName FROM Concatenated WHERE NameNumber = NameCount;</code>
CTE rekursif ini menyediakan penyelesaian berskala dan cekap untuk penggabungan rentetan dalam SQL Server, terutamanya dalam persekitaran di mana fungsi CLR tidak tersedia. Perhatikan penggunaan nvarchar(max)
untuk mengendalikan rentetan bersambung yang berpotensi besar.
Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Rentetan dengan Cekap daripada Berbilang Baris dalam Pelayan SQL Tanpa Fungsi CLR?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!