处理 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中文网其他相关文章!