IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Problème avec les paramètres SQL Server


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut Problème avec les paramètres SQL Server
    Bonjour,

    J'ai deux requêtes qui ont l'air identiques mais qui ne me retournent pas la même chose :

    Requête 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT DISTINCT Fournisseur.id_fournisseur,Fournisseur.nom 
    FROM produit Produit 
    INNER JOIN Fournisseur_Marque on Fournisseur_Marque.id_marque=Produit.Id_marque 
                    AND Fournisseur_Marque.id_structure IN (8,3,2,1) 
    INNER JOIN Fournisseur on Fournisseur.id_fournisseur=Fournisseur_Marque.id_fournisseur 
    INNER JOIN Fournisseur_structure ON Fournisseur_structure.id_fournisseur=Fournisseur_Marque.id_fournisseur 
                    and Fournisseur_structure.id_structure IN (8,3,2,1) 
    WHERE Produit.id_produit=5137416 AND (Fournisseur.abandon = 0)
    Requête 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    declare @structures_parents varchar; set @structures_parents = '8,3,2,1';
    declare @id_produit int; set @id_produit = 5137416;
    SELECT DISTINCT Fournisseur.id_fournisseur,Fournisseur.nom 
    FROM produit Produit 
    INNER JOIN Fournisseur_Marque on Fournisseur_Marque.id_marque=Produit.Id_marque 
                    AND Fournisseur_Marque.id_structure IN (@structures_parents) 
    INNER JOIN Fournisseur on Fournisseur.id_fournisseur=Fournisseur_Marque.id_fournisseur 
    INNER JOIN Fournisseur_structure ON Fournisseur_structure.id_fournisseur=Fournisseur_Marque.id_fournisseur 
                    and Fournisseur_structure.id_structure IN (@structures_parents) 
    WHERE Produit.id_produit=@id_produit AND (Fournisseur.abandon = 0)
    J'ai résussi à identifier le problème.. mais je n'ai pas la solution :

    en fait le problème vient du morceau de requête suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fournisseur_Marque.id_structure IN (@structures_parents)
    en effet, @structures_parents est un varchar : je ne sais pas comment le moteur SQL 2005 arrive à comprendre la requête mais il y arrive pourtant, mais pas très bien puisqu'il retourne un nombre différents d'enregistrements.

    Si quelqu'un connait la solution... ou alors comment transformer un varchar en une chaîne d'entier(peut être cela résoudra-t-il mon problème)?

    Merci d'avance
    Arrêtez de poster des liens! Expliquez! (ça évite les erreur HTTP 404)

    L'homme est plus fort que la machine... ne renoncez jamais


  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    bonjour,

    en utilisant la commande EXECUTE, ce qui vous permettra de concaténer vos paramètres au code initial. Le @id_produit doit être convertit en chaîne lors de la concaténation (il y a peut-être des retouches à faire ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    declare @structures_parents varchar; SET @structures_parents = '8,3,2,1';
    declare @id_produit int; SET @id_produit = 5137416;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    EXECUTE 'SELECT DISTINCT Fournisseur.id_fournisseur,Fournisseur.nom 
    FROM produit Produit 
    INNER JOIN Fournisseur_Marque ON Fournisseur_Marque.id_marque=Produit.Id_marque 
                    AND Fournisseur_Marque.id_structure IN ('+@structures_parents+') 
    INNER JOIN Fournisseur ON Fournisseur.id_fournisseur=Fournisseur_Marque.id_fournisseur 
    INNER JOIN Fournisseur_structure ON Fournisseur_structure.id_fournisseur=Fournisseur_Marque.id_fournisseur 
                    AND Fournisseur_structure.id_structure IN ('+@structures_parents+') 
    WHERE Produit.id_produit='+cast (@id_produit as varchar)+' AND (Fournisseur.abandon = 0)'
    Emmanuel T.

Discussions similaires

  1. Problème avec les curseurs SQL SERVER
    Par stefostillrise dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/11/2005, 13h09
  2. [ODBC] Problème avec odbc et sql server 2005
    Par scaleo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/10/2005, 09h49
  3. [Débutant] Problème avec les paramètres d'une proc stockée
    Par babulior dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/06/2005, 15h38
  4. [SQL Server]Problème avec l'authentification SQL SERVER
    Par tidou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/04/2005, 15h40
  5. Problème avec les paramètres date BDE/ODBC Oracle/XP Pro
    Par Bloon dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/10/2004, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo