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 :
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
Utilisation :
Remplissez la clause WHERE avec l'instruction suivante :
SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))
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!