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

Comment transmettre des valeurs délimitées par des virgules à la fonction IN de SQL Server sans Dynamic SQL ?

Susan Sarandon
Libérer: 2025-01-22 03:56:11
original
258 Les gens l'ont consulté

How to Pass Comma-Delimited Values to SQL Server's IN Function Without Dynamic SQL?

Éviter le SQL dynamique : transmettre des valeurs séparées par des virgules à la clause IN de SQL Server

Le passage direct de chaînes séparées par des virgules à la fonction IN de SQL Server entraîne souvent des erreurs de conversion de type. Par exemple :

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

SELECT * FROM sometable
WHERE tableid IN (@Ids);</code>
Copier après la connexion

Cela produira une erreur « Échec de la conversion » car la clause IN attend des valeurs entières individuelles, pas une chaîne.

Une solution dynamique sans SQL

Une alternative robuste, évitant les pièges du SQL dynamique, consiste à exploiter la fonction CHARINDEX :

<code class="language-sql">DECLARE @Ids varchar(50);
SET @Ids = ',1,2,3,5,4,6,7,98,234,'; -- Note the leading and trailing commas

SELECT * FROM sometable
WHERE CHARINDEX(',' + CAST(tableid AS VARCHAR(8000)) + ',', @Ids) > 0;</code>
Copier après la connexion

En ajoutant des virgules avant et après la chaîne d'entrée @Ids et la conversion tableid, nous garantissons que chaque valeur individuelle est correctement identifiée dans la chaîne délimitée par des virgules. La fonction CHARINDEX vérifie ensuite efficacement la présence de chaque tableid dans la chaîne @Ids modifiée. Cela imite efficacement le comportement de la clause IN sans nécessiter de SQL dynamique.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal