Tukar rentetan yang dipisahkan koma kepada senarai IN dalam klausa SQL WHERE
Soalan:
Apabila anda menyimpan rentetan yang dipisahkan koma sebagai parameter dalam prosedur tersimpan, tugasnya adalah untuk menukarnya kepada senarai IN yang betul dalam klausa WHERE.
Penyelesaian Amalan Terbaik:
Untuk melaksanakan penukaran ini dengan cekap, buat fungsi SQL Server tersuai:
<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:
Isi klausa WHERE dengan pernyataan berikut:
<code class="language-sql">SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))</code>
Perbandingan prestasi:
Fungsi ini memberikan prestasi yang lebih tinggi berbanding kaedah segmentasi berasaskan XML. Gunakan set data ujian yang besar:
Perbezaan prestasi mungkin berbeza-beza, menyerlahkan kecekapan fungsi pembahagian tersuai.
Atas ialah kandungan terperinci Bagaimana dengan Cekap Menukar Rentetan Dipisahkan Koma kepada Senarai SQL IN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!