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 ?

Comment les variables de table peuvent-elles résoudre l'erreur de clause « IN » de SQL Server avec les variables déclarées ?

Patricia Arquette
Libérer: 2025-01-09 20:37:42
original
252 Les gens l'ont consulté

How Can Table Variables Solve SQL Server's

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>
Copier après la connexion

Erreur résultante :

<code>Error: Conversion failed when converting the varchar value ',' to data type int.</code>
Copier après la connexion

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 :

  • Ils stockent des données structurées.
  • Ils peuvent être remplis dynamiquement.
  • Ils fonctionnent comme des tables normales dans les requêtes.

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>
Copier après la connexion

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>
Copier après la connexion

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!

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