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 :

[SQLSERVER2000] Procédure stocké qui retourner plusieurs scalaires


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut [SQLSERVER2000] Procédure stocké qui retourner plusieurs scalaires
    Bonjour à tous,
    VOilà mon problème, je débute complétement avec les procédure stockée.
    j'ai deux tables, employee et signatory.
    Je voudrais me créer une procédure stockée (ou un fonction, je connais pas la différence) qui prend pour paramètre une nom d'employé.
    Je voudrais qu'elle retourne l'identifiant employé d'une part et l'identifiant signataire, s'il existe, d'autre part.
    J'ai fait ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE PROCEDURE RA_getProfile(@sgi varchar(8))
    AS
    DECLARE @id_employee numeric(6)
     
    SET @id_employee = (SELECT E.ID_EMPLOYEE FROM [N4939037].[EMPLOYEE] E
    WHERE E.SGI_EMPLOYEE=@sgi)
    if(@id_employee > 0)
    SELECT S.ID_SIGNATORY FROM [N4939037].[SIGNATORY] S
    WHERE S.SGI_SIGNATORY = @sgi
    GO
    Mais ceci ne me retourne qu'une valeur, celle de SGI_SIGNATORY

    Comment faire pour récupérer ces deux valeurs ?
    Merci grandement pour votre aide !!!

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    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
     
    CREATE PROCEDURE RA_getProfile(
    @sgi varchar(8),
    @id_employee int output,
    @s_employee varchar(50) output
    )
    AS
    begin 
    SELECT @id_employee =E.ID_EMPLOYEE , @s_employee =S.ID_SIGNATORY 
      FROM [N4939037].[EMPLOYEE] E
      JOIN  [N4939037].[SIGNATORY] S on S.SGI_SIGNATORY =E.SGI_EMPLOYEE
    WHERE E.SGI_EMPLOYEE=@sgi
     
    GO
    ensuite pour appeler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    declare @id_e int, @s_e varchar
     
    exec RA_getProfile 'toto', @id_e output,@s_e output
     
    select @id_e, @s_e
    attention n'oublies les OUTPUT....

  3. #3
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    il manque le END

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE PROCEDURE RA_getProfile(
    @sgi varchar(8),
    @id_employee int output,
    @s_employee varchar(50) output
    )
    AS
    begin 
    SELECT @id_employee =E.ID_EMPLOYEE , @s_employee =S.ID_SIGNATORY 
      FROM [N4939037].[EMPLOYEE] E
      JOIN  [N4939037].[SIGNATORY] S ON S.SGI_SIGNATORY =E.SGI_EMPLOYEE
    WHERE E.SGI_EMPLOYEE=@sgi
    end 
    GO

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    merci pour vos réponses !!

    J'ai modifié un peu la réponse ainsi:
    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 RA_getProfile(
    @sgi varchar(8),
    @id_employee numeric(6) output,
    @id_signatory numeric(4) output
    )
    AS
    begin 
    SELECT @id_employee =E.ID_EMPLOYEE , @id_signatory =S.ID_SIGNATORY 
      FROM [N4939037].[EMPLOYEE] E
      JOIN  [N4939037].[SIGNATORY] S ON S.ID_EMPLOYEE =E.ID_EMPLOYEE
    WHERE E.SGI_EMPLOYEE=@sgi
    end
    GO

    ça marche très bien quand un utilisateur est employee et aussi signataire, je récupère alors les deux id sans soucis.
    Cependant, quand un utilisateur est uniquement employé, je ne récpère que des valeurs nulles...
    Je pense que ça vient du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JOIN [N4939037].[SIGNATORY] S ON S.IDEMPLOYEE = E.ID_EMPLOYEE
    Comment faire pour que: quand l'utilisateur n'est pas signataire, on récupère quand même l'id employee (@id_e) et null dans @id_s


    Merci grandement pour vos réponses !

  5. #5
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    il faut remplacer le join par left outer join

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE PROCEDURE RA_getProfile(
    @sgi varchar(8),
    @id_employee numeric(6) output,
    @id_signatory numeric(4) output
    )
    AS
    begin 
    SELECT @id_employee =E.ID_EMPLOYEE , @id_signatory =S.ID_SIGNATORY 
      FROM [N4939037].[EMPLOYEE] E
      LEFT OUTER JOIN  [N4939037].[SIGNATORY] S ON S.ID_EMPLOYEE =E.ID_EMPLOYEE
    WHERE E.SGI_EMPLOYEE=@sgi
    end
    GO

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    C'est nickel ! ça marche super bien !!!
    Par contre, je ne vois pas comment marche le LEFT OUTER JOIN ??

    En tout cas, merci pour votre aide !!!

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

Discussions similaires

  1. [2008R2] Procédure stockée qui retourne plusieurs résultats
    Par zakotcha dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 07/05/2015, 18h10
  2. Réponses: 1
    Dernier message: 24/07/2012, 11h48
  3. Réponses: 22
    Dernier message: 21/01/2011, 22h15
  4. ADO et procédure stockée qui renvoi plusieurs select
    Par Oliv- dans le forum Développement
    Réponses: 2
    Dernier message: 23/04/2008, 14h11
  5. Réponses: 3
    Dernier message: 02/03/2007, 11h41

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