Gestion des clauses IN à l'aide de clauses IN déclarant des variables dans SQL Server
L'insertion de plusieurs valeurs dans une clause IN à l'aide de variables déclarées peut rencontrer des erreurs, surtout si la variable contient des caractères non numériques. Explorons ce problème et discutons d'une solution.
Erreur de compréhension
Dans l'instruction SQL donnée :
<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX) SET @ExcludedList = 3 + ', ' + 4 + ' ,' + '22' SELECT * FROM A WHERE Id NOT IN (@ExcludedList)</code>
Le message d'erreur indique que la conversion d'une valeur VARCHAR contenant des virgules et des espaces en un entier (INT) a échoué. En effet, la clause IN attend une plage de valeurs numériques et les virgules et les espaces ne sont pas reconnus comme des entiers valides.
Utiliser des variables de table pour traiter des listes dynamiques
Une façon de surmonter cette limitation consiste à utiliser une variable de table pour stocker la liste des valeurs de la clause IN. Cela nous permet d'insérer plusieurs valeurs dans une variable de table et de la traiter comme une seule entité.
Créer et remplir des variables de tableau
Déclarez une variable de table pour représenter la liste des valeurs exclues :
<code class="language-sql">DECLARE @ExcludedList TABLE (Id INT)</code>
Insérer des valeurs dans des variables de tableau à l'aide d'une boucle ou de toute autre méthode appropriée :
<code class="language-sql">INSERT INTO @ExcludedList VALUES (3) INSERT INTO @ExcludedList VALUES (4) INSERT INTO @ExcludedList VALUES (22)</code>
Utiliser les variables de table dans la clause IN
Les clauses IN peuvent désormais référencer des variables de table, qui géreront automatiquement la conversion de leurs valeurs en entiers :
<code class="language-sql">SELECT * FROM A WHERE Id NOT IN (SELECT Id FROM @ExcludedList)</code>
Cette instruction modifiée renverra les lignes du tableau A qui ne figurent pas dans la liste d'exclusion, évitant ainsi les erreurs de conversion.
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!