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>
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>
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!