将逗号分隔的字符串转换为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中文网其他相关文章!