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 :

probleme de variable dans une jointure


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 3
    Points
    3
    Par défaut probleme de variable dans une jointure
    bonjour
    dans mon appli asp.net je charge une variable qui deviendra une clause dans ma requete

    asp.net ma variable devient
    and (IdAnn=1 or IdAnn=2 or IdAnn=3) (cette ligne est envoyé dans la variable @clause )

    pour execute cette requete je passe par une procédure stocké

    donc dans la procédure j'ai une variable

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @clause varchar(100),
     
    LEFT OUTER JOIN Gain ON dates = Gain.DtDate and Gain.idaff=@idaff + @clause

    en executant sql server renvoi une erreur
    Échec de la conversion de la valeur varchar 'and (IdAnn=1 or IdAnn=2 or IdAnn=3) ' en type de données int

    merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Points : 556
    Points
    556
    Par défaut
    Quel sont les types de Gain.idaff, @idaff et @clause ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Le type de
    @idaff int
    @clause varchar(100)

    merci

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous ne pouvez pas insérer des jointures ainsi avec des littéraux.

    Il faut d'abord construire votre requête comme une chaîne de caractères puis l'exécuter.

    Votre requête devient à demander au moteur d'exécuter le SQL suivant (je suppose @idaff = 10000 pour l'exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LEFT OUTER JOIN Gain
      ON dates = Gain.DtDate
     AND Gain.idaff = 10000 + 'and (IdAnn=1 or IdAnn=2 or IdAnn=3)'
    Ce qui n'a pas de sens !

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Points : 556
    Points
    556
    Par défaut
    Citation Envoyé par tralala232 Voir le message
    Le type de
    @idaff int
    @clause varchar(100)

    merci
    C'est normal que vous ne pouvez pas ajouter du int avec varchar. Je suppose que la colonne Gain.idaff est aussi de type int.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Ok j'ai compris il faut dons passer toute la requete en varchar (en texte)

    mais comment le faire en sql, j'essai le select principal dans une variable mais j'obtien une erreur de syntaxe

    voici mon code

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[AffStatJour] 
    		@dateDeb datetime,
    		@dateFin datetime,
    		@Idaff int,
    		@Refsite int
     
     
    AS
    BEGIN
    WITH	CTE_DATES_PERIODE AS
    	(
    			SELECT @dateDeb AS dates
    		UNION ALL
    			SELECT DATEADD(day, 1, dates)
    			FROM CTE_DATES_PERIODE
    			WHERE dates <= @dateFin
    	)
    SELECT  
    @Refsite as 'Refsite' ,
     CONVERT(CHAR(10), dates, 103) AS dates,   
    isnull(SUM(A),0) AS Affichage, 
    isnull(SUM(AValid),0) AS AValide, 
    isnull(SUM(C),0) AS Clic, 
    isnull(SUM(CValid),0) AS CValide, 
    isnull(SUM(ARefuse),0) AS CRefuse, 
    isnull(SUM(DC),0) AS [Double-clic], 
    isnull(SUM(DCValid),0) AS DCValide, 
    isnull(SUM(DCRefuse),0) AS DCRefuse, 
    isnull(SUM(F),0) AS Formulaire,  
    isnull(SUM(FValid),0) AS FValide, 
    isnull(SUM(FRefuse),0) AS FRefuse, 
    isnull(SUM(V),0) AS Vente, 
    isnull(SUM(VValid),0) AS VValide, 
    isnull(SUM(VRefuse),0) AS VRefuse, 
    isnull(SUM(Gain),0)  AS [Total en attente], 
    isnull(SUM(GainValid),0) AS [Total valide] 
    FROM       CTE_DATES_PERIODE 
     
    LEFT OUTER JOIN Gain ON dates = Gain.DtDate and Gain.idaff=@idaff and Gain.refsite=@refSite
     
    WHERE (dates <= @dateFin) 
    GROUP BY  Gain.IdAff,dates,Gain.Refsite 
    ORDER BY dates
    OPTION (MAXRECURSION 366) 
    END

    merci

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Penser au bouton résolu.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il manque peut-être un point-virgule à la fin de la requête (après le maxrecursion).

Discussions similaires

  1. C++ - Cplex problem de variable dans une boucle for & random
    Par tranenengel dans le forum C++/CLI
    Réponses: 2
    Dernier message: 27/03/2013, 08h14
  2. [MySQL] Probleme de variable dans une fonction
    Par termi78 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 03/05/2012, 17h03
  3. probleme appel variable dans une variable
    Par xstier dans le forum Langage
    Réponses: 9
    Dernier message: 18/05/2011, 00h16
  4. [MySQL] Probleme de variable dans une requête
    Par arthur.sw dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/09/2010, 21h21
  5. probleme de variable dans une boucle
    Par www.rubis dans le forum Linux
    Réponses: 2
    Dernier message: 04/09/2007, 16h06

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