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

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    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 !!!
    tout le monde est d'accord pour critiquer la pensée unique

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    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....
    Errare humanum est, perseverare diabolicum (Sénèque)

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    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
    Errare humanum est, perseverare diabolicum (Sénèque)

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    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 !
    tout le monde est d'accord pour critiquer la pensée unique

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    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
    Errare humanum est, perseverare diabolicum (Sénèque)

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    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 !!!
    tout le monde est d'accord pour critiquer la pensée unique

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

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    regarde l'article du dieu (SQLPro)

    http://sqlpro.developpez.com/cours/sqlaz/jointures/
    Errare humanum est, perseverare diabolicum (Sénèque)

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Merci pour ce lien Serge0934
    tout le monde est d'accord pour critiquer la pensée unique

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    je me permets une petite dernière question puisqu'on l'a abordée.
    A quoi sert exactement begin et end. et quoi doit on les utiliser ?

    Merci pour les réponses à cette question forcément naïve ...
    tout le monde est d'accord pour critiquer la pensée unique

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut Begin...end
    BEGIN...END definit un bloc d'instruction TRANSACT SQL.
    Il rassemble plusieurs instructions.

    Vous n'avez pas besoin de BEGIN...END si vous avez une seule instruction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE PROCEDURE INVENTORY_TOP
    @MAX int
    AS
    SELECT TOP(@MAX) * FROM INVENTORY
    GO

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Ok, merci pour cette réponse.
    A n'utiliser que lorsque l'on éxécute plusieurs instructions.
    tout le monde est d'accord pour critiquer la pensée unique

+ 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