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

Comment transmettre une chaîne délimitée par des virgules à la fonction IN de SQL Server sans Dynamic SQL ?

Linda Hamilton
Libérer: 2025-01-22 04:21:09
original
160 Les gens l'ont consulté

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

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

Le passage direct d'une chaîne délimitée par des virgules à la fonction IN de SQL Server entraîne souvent des erreurs de conversion de type. Examinons un scénario courant :

<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 entraînera une erreur de conversion car la clause IN attend des valeurs entières individuelles, pas une chaîne. Pour contourner cela sans utiliser de SQL dynamique, une méthode plus robuste consiste à utiliser la fonction CHARINDEX :

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

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

Cette requête améliorée ajoute intelligemment des virgules aux deux extrémités de la chaîne @Ids. CHARINDEX recherche ensuite une version délimitée par des virgules de tableid dans la chaîne @Ids modifiée. Cela garantit des correspondances exactes et évite les correspondances partielles qui pourraient conduire à des résultats incorrects. Seules les lignes où le tableid se trouve dans la liste séparée par des virgules seront renvoyé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!

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