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 :

Procédure stockée, concaténation dans requête


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut Procédure stockée, concaténation dans requête
    Bonjour
    J'ai un petit souci sur une procédure stockée.
    Je passe 2 paramètres à cette procédure:
    -un paramètre en entrée, de type varchar(30)
    -un paramètre output, de type float

    En fonction du premier paramètre, je vais faire un select sur un champ ou sur un autre dans une table.
    Je souhaite mettre le résultat, de type float, dans le paramètre en output.

    Voici la tête de la procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    REATE PROCEDURE dbo.sp_eval_valeur_parcelle (@leChamp varchar (30),@resultat float OUTPUT) AS
     
    declare @NomChampBase varchar (50)
      If @leChamp='!SurfaceAdminParcelle' begin 
        set @NomChampBase = 'Champ1'
      end
      If @leChamp='!SurfaceReelleParcelle' begin 
        set @NomChampBase = 'Champ2'
      end
     
    select @resultat = (SELECT @NomChampBase FROM PARCELLE Where code_propriete=@Code_propriete and n_parcelle=@n_parcelle)
     
    GO
    Le problème c'est que le résultat, c'est à dire la valeur de la variable @resultat est égal au nom du champ, c'est à dire 'Champ1' ou 'Champ2'

    Comment puis je faire pour obtenir le résultat que je souhaite? Ou ce n'est pas possible en mettant le champ sur lequel on fait le select en paramètre?
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    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
    CREATE PROCEDURE sp_eval_valeur_parcelle 
    (@leChamp varchar (30),
    @Code_propriete int,
    @n_parcelle int,
     @resultat float OUTPUT) 
    AS
    BEGIN
     
    If @leChamp='!SurfaceAdminParcelle' 
      SELECT @Resultat=Champ1  
      FROM PARCELLE 
      Where code_propriete=@Code_propriete 
      and n_parcelle=@n_parcelle
     
     
      If @leChamp='!SurfaceReelleParcelle' 
      SELECT @Resultat=Champ2  
      FROM PARCELLE 
      Where code_propriete=@Code_propriete 
      and n_parcelle=@n_parcelle
    END     
    GO
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut Merci mais...
    Merci Fadace mais...
    Je souhaiterais savoir s'il existe un moyen de ne pas répéter la requête. C'est à dire un moyen plus élégant. J'ai en effet 6 cas différents. Je n'en ai mis que deux pour l'exemple mais il y en a 6 et il pourrait y en avoir plus dans quelque temps. Donc le problème est de concaténer le nom du champ. C'est à dire d'avoir le nom du champ en variable.
    Est ce possible?

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 84
    Points
    84
    Par défaut Utiliser un Case
    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
    CREATE PROCEDURE sp_eval_valeur_parcelle
    (@leChamp varchar (30),
     @Code_propriete int,
     @n_parcelle int,
     @resultat float OUTPUT)
    AS
    BEGIN
     
      SELECT @Resultat=( case @leChamp when '!SurfaceAdminParcelle' then Champ1
                                       when '!SurfaceReelleParcelle' then Champ2
                         end )
      FROM PARCELLE
      Where code_propriete=@Code_propriete
      and n_parcelle=@n_parcelle
    END     
    GO

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut ok
    merci. En fait cela revient à peu prés (en plus élégant) à faire des if.
    Donc il est impossible de concaténer des chaines dans une requête.

  6. #6
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 84
    Points
    84
    Par défaut C'est la récupération qui pose problème
    Concaténer est possible via sp_ExecuteSQL sauf que tu ne pourras pas récupérer le @resultat.

    donc pas d'autre moyen plus simple que le Case ( à ma connaissance )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [procédure stockée] Erreur dans un while
    Par LE NEINDRE dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 19/06/2007, 16h46
  2. Réponses: 11
    Dernier message: 12/04/2007, 22h13
  3. [Procédure stockée]Concaténation dans un IN
    Par jouille dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/07/2006, 16h54
  4. [Visual Web] [SJSC] Concaténation dans requête SQL
    Par Original Prankster dans le forum NetBeans
    Réponses: 22
    Dernier message: 15/08/2005, 14h50
  5. procédure stockée Oracle dans delphi 6
    Par UPNE387 dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/05/2004, 09h47

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