Maison >base de données >tutoriel mysql >Comment les variables de table peuvent-elles résoudre l'erreur de clause « IN » de SQL Server avec les variables déclarées ?
SQL Server : Utilisation de variables de table pour corriger les erreurs de clause "IN" avec les variables déclarées
La clause SQL Server IN
est un puissant outil de filtrage. Cependant, l'utilisation d'une variable déclarée directement à l'intérieur de celle-ci entraîne souvent l'erreur : "La conversion a échoué lors de la conversion de la valeur varchar ',' en type de données int." Cela se produit parce que la variable contient fréquemment une chaîne séparée par des virgules, ce qui entraîne des incompatibilités de types de données.
Scénario de problème :
Considérez cet extrait de code :
<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX) SET @ExcludedList = '3,4,22' SELECT * FROM A WHERE Id NOT IN (@ExcludedList)</code>
Erreur résultante :
<code>Error: Conversion failed when converting the varchar value ',' to data type int.</code>
La solution : les variables de table
Pour éviter cette erreur, utilisez une variable de table pour stocker les valeurs. Les variables de tableau offrent plusieurs avantages :
Remplir dynamiquement une variable de table :
Le code suivant remplit dynamiquement une variable de table à l'aide d'une boucle WHILE
pour traiter les valeurs séparées par des virgules dans @ExcludedList
:
<code class="language-sql">DECLARE @your_list TABLE (list INT) -- Note: Changed to INT to match Id data type DECLARE @Value VARCHAR(25) DECLARE @Pos INT SET @ExcludedList = '3,4,22' -- Example list SET @Pos = CHARINDEX(',', @ExcludedList) WHILE @Pos > 0 BEGIN SET @Value = SUBSTRING(@ExcludedList, 1, @Pos - 1) INSERT INTO @your_list (list) VALUES (@Value) SET @ExcludedList = SUBSTRING(@ExcludedList, @Pos + 1, LEN(@ExcludedList)) SET @Pos = CHARINDEX(',', @ExcludedList) END IF LEN(@ExcludedList) > 0 BEGIN INSERT INTO @your_list (list) VALUES (@ExcludedList) END SELECT * FROM A WHERE Id NOT IN (SELECT list FROM @your_list)</code>
Comment utiliser :
Après avoir renseigné la variable de table, utilisez-la dans la clause IN
:
<code class="language-sql">SELECT * FROM A WHERE Id NOT IN (SELECT list FROM @your_list)</code>
Cela filtre efficacement les lignes en fonction du @your_list
contenu. Cette méthode évite les problèmes de conversion de type de données, permettant des requêtes dynamiques avec un nombre variable de valeurs séparées par des virgules. Notez que la colonne list
dans @your_list
doit correspondre au type de données de la colonne Id
dans le tableau A
.
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!