Traitez efficacement les chaînes séparées par des virgules pour optimiser les requêtes SQL
Dans SQL Server, lors de l'utilisation de procédures stockées, il est souvent nécessaire d'analyser les chaînes séparées par des virgules dans des listes de valeurs à utiliser dans la clause WHERE. Cela permet un filtrage dynamique des données basé sur plusieurs critères.
Description du problème :
Votre procédure stockée reçoit en paramètre une chaîne séparée par des virgules, vous devez la convertir en une instruction de clause IN, par exemple :
<code class="language-sql">WHERE Account IN ('SA', 'A')</code>
Bonnes pratiques :
Pour ce faire, vous pouvez utiliser une fonction définie par l'utilisateur (UDF) pour diviser une chaîne séparée par des virgules en valeurs individuelles. Voici un UDF efficace nommé f_split
qui accomplit cette tâche :
<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>
Utilisation :
Pour utiliser la fonction f_split
, vous pouvez utiliser l'instruction suivante :
<code class="language-sql">SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))</code>
Comparaison des performances :
La fonctionf_split
présente des avantages de performances significatifs par rapport aux méthodes de segmentation basées sur XML. Par exemple, sur un ensemble de données comportant 100 000 enregistrements :
f_split
Fonction : 43 secondesConclusion :
L'utilisation de la fonction f_split
fournit un moyen efficace et évolutif d'analyser des chaînes délimitées par des virgules à utiliser dans les clauses SQL WHERE. Il permet des requêtes flexibles basées sur plusieurs critères et améliore les performances des procédures stockées qui gèrent ces entrées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!