處理 SQL 查詢中的逗號分隔字串
許多資料庫操作需要輸入參數作為清單。 當這些清單以逗號分隔的字串形式提供時,將它們轉換為 SQL 相容的格式至關重要。
挑戰:
考慮一個接收逗號分隔字串的預存過程,如下所示:
<code class="language-sql">DECLARE @Account AS VARCHAR(200) SET @Account = 'SA,A'</code>
目標是將這個字串轉換為可用的 SQL IN
子句:
<code class="language-sql">WHERE Account IN ('SA', 'A')</code>
高效能解決方案:
使用者定義的函數提供了最有效的方法。此函數將逗號分隔的字串分割成一個表:
<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>
然後在 SQL 查詢中使用此函數:
<code class="language-sql">SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))</code>
為什麼這個方法比較優越:
與 XML 解析等替代方案相比,此函數提供:
以上是如何有效率地解析 SQL IN 子句的逗號分隔字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!