Memproses rentetan dipisahkan koma dengan cekap untuk mengoptimumkan pertanyaan SQL
Dalam SQL Server, apabila menggunakan prosedur tersimpan, selalunya perlu menghuraikan rentetan yang dipisahkan koma ke dalam senarai nilai untuk digunakan dalam klausa WHERE. Ini membolehkan penapisan dinamik data berdasarkan berbilang kriteria.
Penerangan masalah:
Prosedur tersimpan anda menerima rentetan dipisahkan koma sebagai parameter, anda perlu menukarnya menjadi pernyataan klausa IN, contohnya:
<code class="language-sql">WHERE Account IN ('SA', 'A')</code>
Amalan Terbaik:
Untuk melakukan ini, anda boleh menggunakan fungsi takrif pengguna (UDF) untuk memisahkan rentetan yang dipisahkan koma kepada nilai individu. Berikut ialah UDF yang cekap bernama f_split
yang melaksanakan tugas ini:
<code class="language-sql">CREATE function [dbo].[f_split] ( @param nvarchar(max), @delimiter char(1) ) returns @t table (val nvarchar(max), seq int) as begin set @param += @delimiter ;with a as ( select cast(1 as bigint) f, charindex(@delimiter, @param) t, 1 seq union all select t + 1, charindex(@delimiter, @param, t + 1), seq + 1 from a where charindex(@delimiter, @param, t + 1) > 0 ) insert @t select substring(@param, f, t - f), seq from a option (maxrecursion 0) return end</code>
Penggunaan:
Untuk menggunakan fungsi f_split
, anda boleh menggunakan pernyataan berikut:
<code class="language-sql">SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))</code>
Perbandingan prestasi:
Fungsif_split
mempunyai kelebihan prestasi yang ketara berbanding kaedah segmentasi berasaskan XML. Contohnya, pada set data dengan 100,000 rekod:
f_split
Fungsi: 43 saatKesimpulan:
Menggunakan fungsi f_split
menyediakan cara yang cekap dan berskala untuk menghuraikan rentetan dipisahkan koma untuk digunakan dalam klausa SQL WHERE. Ia membenarkan pertanyaan fleksibel berdasarkan pelbagai kriteria dan meningkatkan prestasi prosedur tersimpan yang mengendalikan input sedemikian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan Rentetan Dipisahkan Koma dengan Cekap untuk Klausa SQL WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!