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

Développement SQL Server Discussion :

Sous Requête avec Variable (A SELECT statement that assigns a value to a variable must not be combined with da


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2016
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Sous Requête avec Variable (A SELECT statement that assigns a value to a variable must not be combined with da
    Bonjour,

    J'ai créer une requête et je veux déclarer des variables pour alléger mon code. J'ai deux cas de variable et qui me donne toujours le même message d'erreur, mais je reçois toujours le message d'erreur suivant : A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations."

    ce que je veux c'est que dans mon select je vois la valeur de mes variables. si je mets seulement @Exchange = (case when OrderHed.RateGrpCode = 'MDS' then OrderHed_ud.ExchRate_Comptable_c else OrderHed.ExchangeRate end) sans le , @exchange, je n'ai pas de message d'erreur, mais je ne vois pas la valeur de ma variable.

    ------------Premier code --------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DECLARE @Exchange decimal;
     
    select Orderhed.Ordernum, 
     
         @Exchange =  (case when OrderHed.RateGrpCode = 'MDS' then OrderHed_ud.ExchRate_Comptable_c else OrderHed.ExchangeRate end) ,
    	 @Exchange
     
    	 from erp.OrderHed
    	 left join erp.OrderHed_UD	
    		on OrderHed_UD.ForeignSysRowID = orderhed.SysRowID
    Me retourne le message d'erreur "A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations."


    ---------------- Deuxième Code
    Code : 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
     
    DECLARE @Exchange decimal;
     
    select Orderhed.Ordernum, orderdtl.orderline, 
     
    	 @MiscCharge = CASE WHEN
                                 ((SELECT        SUM(DocMiscAmt)
                                     FROM            erp.ordermsc
                                     WHERE        ordermsc.company = orderdtl.company AND ordermsc.ordernum = orderdtl.ordernum AND ordermsc.orderline = orderdtl.orderline AND (Ordermsc.MiscCode = 'MIST' OR
                                                              Ordermsc.MiscCode = 'DISM' OR
                                                              Ordermsc.MiscCode = 'DISP')
                                     GROUP BY Ordermsc.Ordernum, OrderMsc.Orderline)) IS NULL THEN 0 ELSE
                                 (SELECT        SUM(DocMiscAmt)
                                   FROM            erp.ordermsc
                                   WHERE        ordermsc.company = orderdtl.company AND ordermsc.ordernum = orderdtl.ordernum AND ordermsc.orderline = orderdtl.orderline AND (Ordermsc.MiscCode = 'MIST' OR
                                                             Ordermsc.MiscCode = 'DISM' OR
                                                             Ordermsc.MiscCode = 'DISP')
                                   GROUP BY Ordermsc.Ordernum, OrderMsc.Orderline) END,
    	 @MiscCharge
     
     
    	 from erp.OrderHed
    	 left join erp.OrderHed_UD	
    		on OrderHed_UD.ForeignSysRowID = orderhed.SysRowID
         left join erp.OrderDtl
    		on orderdtl.Company = orderhed.Company
    		and orderdtl.OrderNum = orderhed.OrderNum

  2. #2
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 60
    Points : 71
    Points
    71
    Par défaut
    Bonjour,

    Le message est assez explicite.

    Après passage sur google traduction, ton message d'erreur indique : "Une instruction SELECT qui affecte une valeur à une variable ne doit pas être combinée avec des opérations de récupération de données.".

    autrement dit, tu n'as pas le droit de combiner des affectations de variables avec une colonne "normale" de SELECT.

    Ne laisse dans le SELECT que l'affectation de la variable et ça devrait mieux se passer.

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Bonjour,

    en effet, vous ne pouvez pas une requête qui remonte des données affecter une/des valeur(s) à une variable.

    D'ailleurs, quelle devrait être la valeur de la variable, puisqu'il y a plusieurs lignes dans le résultat.

    Si vous voulez afficher une colonne supplémentaire pour afficher le résultat de votre calcul, vous pouvez le faire directement sans variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select Orderhed.Ordernum, 
     
         case when OrderHed.RateGrpCode = 'MDS' then OrderHed_ud.ExchRate_Comptable_c else OrderHed.ExchangeRate end  AS Exchange
     
    	 from erp.OrderHed
    	 left join erp.OrderHed_UD	
    		on OrderHed_UD.ForeignSysRowID = orderhed.SysRowID
    Si vous voulez faire autre chose, spécifiez mieux le contexte et ce que vous cherchez à faire

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour,

    Bonjour
    ,

    en effet, vous ne pouvez pas (exécuter) une requête qui remonte des données (et) affecter une/des valeur(s) à une variable.
    Il y a des interférences sur la ligne

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2009
    Messages : 35
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour,

    Bonjour,

    en effet, vous ne pouvez pas une requête qui remonte des données affecter une/des valeur(s) à une variable.

    D'ailleurs, quelle devrait être la valeur de la variable, puisqu'il y a plusieurs lignes dans le résultat.

    Si vous voulez afficher une colonne supplémentaire pour afficher le résultat de votre calcul, vous pouvez le faire directement sans variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select Orderhed.Ordernum, 
     
         case when OrderHed.RateGrpCode = 'MDS' then OrderHed_ud.ExchRate_Comptable_c else OrderHed.ExchangeRate end  AS Exchange
     
    	 from erp.OrderHed
    	 left join erp.OrderHed_UD	
    		on OrderHed_UD.ForeignSysRowID = orderhed.SysRowID
    Si vous voulez faire autre chose, spécifiez mieux le contexte et ce que vous cherchez à faire


    Au départ c'est ce que j'ai fait, sans mettre de variable. Mon but c'était d'optimiser mon code. Car les deux formules, je dois les copiers dans plusieurs calculs. Ce qui fait un code assez long.

Discussions similaires

  1. Sous requête avec plusieurs retours
    Par grunk dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/10/2007, 13h57
  2. Sous-requêtes avec IN et NOT IN
    Par angebe dans le forum SQL
    Réponses: 6
    Dernier message: 28/09/2007, 11h59
  3. sous requête avec liste
    Par illegalsene dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/05/2007, 12h11
  4. Requête et sous requête avec SELECT et UPDATE
    Par Véronique75ca dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 29/06/2006, 21h25
  5. Sous-requête dans la clause Select
    Par Danger dans le forum WinDev
    Réponses: 2
    Dernier message: 24/05/2005, 17h33

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