Gestion des chaînes séparées par des virgules dans les requêtes SQL
De nombreuses opérations de base de données nécessitent des paramètres d'entrée sous forme de listes. Lorsque ces listes sont fournies sous forme de chaînes séparées par des virgules, leur conversion dans un format compatible SQL est cruciale.
Le défi :
Considérons une procédure stockée recevant une chaîne séparée par des virgules comme celle-ci :
DECLARE @Account AS VARCHAR(200) SET @Account = 'SA,A'
Le but est de transformer cette chaîne en une clause SQL IN
utilisable :
WHERE Account IN ('SA', 'A')
Une solution performante :
Une fonction définie par l'utilisateur offre l'approche la plus efficace. Cette fonction divise la chaîne séparée par des virgules en un tableau :
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
Cette fonction est ensuite utilisée au sein de la requête SQL :
SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))
Pourquoi cette méthode est supérieure :
Par rapport aux alternatives telles que l'analyse XML, cette fonction fournit :
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!