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 :

[SQL Server] Récupérer un résultat de procédure stockée dans une autre procédure


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Points : 83
    Points
    83
    Par défaut [SQL Server] Récupérer un résultat de procédure stockée dans une autre procédure
    Bonjour,

    Je cherche le moyen de récupérer le résultat d'une procédure stockée dans une autre procédure stockée.

    Voici un exemple :

    Trois tables :
    Utilisateur(ID, Nom)
    Autorisation(ID_Utilisateur,ID_Rubrique)
    Rubrique(ID, Titre)

    CREATE PROCEDURE Utilisateurs_authorises @ID_rubrique as integer AS
    SELECT ID
    FROM Utilisateur
    WHERE ID IN(
    SELECT ID_Utilisateur
    FROM Autorisation
    WHERE ID_Rubrique=@ID_rubrique
    )

    CREATE PROCEDURE Affiche_utilisateur_authorises AS
    SELECT Nom
    FROM Utilisateur
    WHERE ID IN(EXECUTE Utilisateurs_authorises 514)

    Remmarques :
    1) "On pourrait avoir le meme résultat en une procédure" allez-vous me dire, mais il s'agit ici d'un exemple simplifié. J'ai réelement besoin de diviser un traitement en deux procédures stockées.
    2) La ligne : "WHERE ID IN(EXECUTE UTilisateurs_authorises 514)" ne fonctionne pas mais c'est un exemple que ce que je souhaite obtenir.

    Il existe sans doute une solution en créant la procédure Utilisateurs_authorises de la façon suivante mais je ne sais pas comment exploiter cette dernière :
    CREATE PROCEDURE Utilisateurs_authorises @ID_rubrique as integer, @resultTable CURSOR VARYING OUTPUT AS

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Il faudrait que ta procédure soit en fait une fonction qui renvoie un curseur.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Tu peux effectivement faire une fonction qui renvoie une variable de type table (table valued function), ou tu peux stocker le résultat de ta procédure dans une table temporaire (ou variable de type table) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO #tmp
    EXEC maproc
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Merci à vous deux pour ces pistes qui mon mis sur la bonne voie.
    Pour ce qui est des curseurs je n'ai pas approfondi l'idée (car ça ne correspondait finalement pas à mon problème).
    Je ne connaissais pas les fonctions sous MS SQL. Une fonction retournant une variable de format TABLE était exactement ce qui me fallait. Pour ceux que ça intéresse voici un exemple (remprenant l'exemple que j'ai donnée initialement)

    Trois tables :
    Utilisateur(ID, Nom)
    Autorisation(ID_Utilisateur,ID_Rubrique)
    Rubrique(ID, Titre)

    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
     
     
    CREATE FUNCTION Utilisateurs_authorises(@ID_rubrique int) RETURNS @Une_table table(ID_Utilisateur int) AS
    INSERT @Une_table
    SELECT ID
    FROM Utilisateur
    WHERE ID IN(
    SELECT ID_Utilisateur
    FROM Autorisation
    WHERE ID_Rubrique=@ID_rubrique
    )
     
     
    CREATE PROCEDURE Affiche_utilisateur_authorises @IdRubrique int AS
    SELECT Nom
    FROM Utilisateur, Utilisateurs_authorises(@IdRubrique) Autorisation
    WHERE ID=Autorisation.ID_Utilisateur

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 03/06/2010, 10h39
  2. Appel d'une procédure stockée dans une autre.
    Par saymon dans le forum Développement
    Réponses: 6
    Dernier message: 19/05/2009, 12h17
  3. Traiter une procédure stocké dans une autre
    Par tribaleur dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/07/2008, 20h07
  4. Réponses: 4
    Dernier message: 26/04/2007, 09h03
  5. Sql 2000: Procédure stockée dans une vue
    Par MALAGASY dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 13/10/2006, 17h41

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