將逗號分隔的字串轉換為SQL WHERE子句中的IN列表
問題:
在預存程序中將逗號分隔的字串儲存為參數時,任務是將其轉換為WHERE子句中的正確IN清單。
最佳實務解決方案:
為了有效率地執行此轉換,請建立一個自訂SQL Server函數:
<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>
使用方法:
使用以下語句填入WHERE子句:
<code class="language-sql">SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))</code>
效能比較:
與基於XML的分割方法相比,此函數提供了更高的效能。使用大型測試資料集:
效能差異可能會有所不同,突顯了自訂分割函數的效率。
以上是如何有效率地將逗號分隔的字串轉換為 SQL IN 清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!