Maison >base de données >tutoriel mysql >Comment convertir efficacement une chaîne séparée par des virgules en liste SQL IN ?
Convertir une chaîne séparée par des virgules en liste IN dans la clause SQL WHERE
Question :
Lorsque vous stockez une chaîne séparée par des virgules en tant que paramètre dans une procédure stockée, la tâche consiste à la convertir en la liste IN correcte dans la clause WHERE.
Meilleures pratiques :
Pour effectuer cette conversion efficacement, créez une fonction SQL Server personnalisée :
<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 :
Remplissez la clause WHERE avec l'instruction suivante :
<code class="language-sql">SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))</code>
Comparaison des performances :
Cette fonction offre des performances supérieures par rapport aux méthodes de segmentation basées sur XML. Utilisez un grand ensemble de données de test :
Les différences de performances peuvent varier, mettant en évidence l'efficacité des fonctions de partage personnalisé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!