Maison >base de données >tutoriel mysql >Comment transmettre efficacement des valeurs délimitées par des virgules à une fonction SQL Server IN ?

Comment transmettre efficacement des valeurs délimitées par des virgules à une fonction SQL Server IN ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-22 04:25:09537parcourir

How to Efficiently Pass Comma-Delimited Values to a SQL Server IN Function?

Passer les valeurs délimitées à la fonction SQL Server IN

Transmettre des valeurs de chaîne séparées par des virgules à la fonction IN dans SQL Server peut être un défi. L'utilisation directe de la fonction IN contenant des chaînes délimitées entraînera des erreurs de conversion.

Option 1 : SQL dynamique

Une solution consiste à utiliser du SQL dynamique, qui vous permet de créer des clauses IN de manière dynamique. Cependant, cette méthode n’est pas recommandée en raison de problèmes de sécurité et de performances.

Option 2 : Opération de chaîne

Une solution plus efficace et plus sûre consiste à manipuler la chaîne délimitée dans un format acceptable pour la fonction IN. Une option consiste à utiliser la fonction CHARINDEX() pour vérifier si chaque valeur de la chaîne délimitée correspond à une valeur de colonne dans le tableau :

<code class="language-sql">DECLARE @Ids varchar(50) = ',1,2,3,5,4,6,7,98,234,'

SELECT * 
FROM sometable
WHERE CHARINDEX(','+CAST(tableid AS VARCHAR(8000))+',', @Ids) > 0</code>

Cette méthode ne nécessite pas de SQL dynamique, équilibrant ainsi les avantages en matière de sécurité et de performances.

Solution simple

Pour ceux qui recherchent une solution moins élégante mais plus pratique, il existe une astuce simple :

<code class="language-sql">DECLARE @Ids varchar(50) = ',1,2,3,5,4,6,7,98,234,'

SELECT * 
FROM sometable
WHERE ',' + CONVERT(VARCHAR, tableid) + ',' LIKE '%,' + @Ids + '%';</code>

Bien que cette méthode ne soit pas aussi efficace que la méthode CHARINDEX(), elle offre une alternative rapide et simple.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn