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!