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 :

imbrication de procédures stockées


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de flogreg
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 432
    Par défaut imbrication de procédures stockées
    Bonjour,

    J'ai cette procédure stocké :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE PROCEDURE [dbo].[proc1]
    As
    BEGIN
         insert into matable(champs1) values('pouet')
         select @@identity as resultat1
    END
    maintenant, j'ai une deuxieme procédure qui appelle la premier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE PROCEDURE [dbo].[proc2]
    As
    BEGIN
         exec proc1
         insert into matable2(champs1) values('pouet2')
         select @@identity as resultat2
    END
    Mon problème est que quand j'appelle proc2, je recois en retour 2 lignes(le résultat de proc1 et de proc2). Je ne veux récupérer que le résultat de proc2.

    Mes questions :
    1. Est ce une bonne solution d'imbriquer les procédures stockées (sachant que je n'imbrique qu'un seul niveau) ?
    2. Si oui, comment faire en sql ?
    3. si impossible en sql, comment le gérer coté code qui appelle cette procédure ? (C# en l'occurence)

    Merci beaucoup pour vos conseils

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 021
    Billets dans le blog
    6
    Par défaut
    Mon problème est que quand j'appelle proc2, je recois en retour 2 lignes(le résultat de proc1 et de proc2). Je ne veux récupérer que le résultat de proc2.
    Votre exemple ne montre nullement cela...


    1. Est ce une bonne solution d'imbriquer les procédures stockées (sachant que je n'imbrique qu'un seul niveau) ?
    OUI

    2. Si oui, comment faire en sql ?
    Comme vous l'avez fait mais en récupérant aussi le code retour de la proc appelée ou encore le message d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    3. si impossible en sql, comment le gérer coté code qui appelle cette procédure ? (C# en l'occurence)
    Vous avez des objets spécialisé de lancement des procédures.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé Avatar de flogreg
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 432
    Par défaut
    merci pour les réponses.

    Coté code, j'utilise cette méthode pour exécuter ma procédure stockée http://msdn.microsoft.com/fr-fr/libr...ke(VS.80).aspx (c'est la meme qu'on retrouve partout)

    Je récupère le résultat de proc1 et non de proc2...

    Parfois j'aimerais faire l'inverse de ca ==>


    edit : ca fonctionne si j'enleve cette ligne SELECT @@identity AS resultat1 dans proc1. Mais j'en ai besoin lorsque j'appelle directement proc1

  4. #4
    Membre éclairé Avatar de flogreg
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 432
    Par défaut
    Je ne trouve vraiment pas ce qui cloche. Je vais aller demander sur le forum C#... J'avais demandé ici car je pensais vraiment que ca venait des procédures stockées...

  5. #5
    Membre éclairé Avatar de flogreg
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 432
    Par défaut
    Bonsoir,
    Je suis allé poser mes questions sur le forum C# et l'on m'a conseillé de ne pas imbriquer mes procédures... Je ne sais plus quoi en penser

    Je souhaite poser une dernière question. Y a t'il moyen d'appeler une procédure stockée en ignorant les valeurs de retour ? Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exec maProcedure whitout value
    Si, vraiment je ne peux pas faire ca, je pense que je devrais me faire une raison et appeler mes procédures différement...

  6. #6
    Membre éclairé Avatar de flogreg
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 432
    Par défaut
    Ca y est ! J'ai trouvé ! Merci le DBA

    En fait, il suffit de définir un paramètre de type output dans proc1 comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ALTER PROCEDURE [dbo].[proc1]
    @test  int output 
    AS
    BEGIN
         INSERT INTO matable(champs1) VALUES('pouet')
         SELECT @test = @@identity
    END
    puis dans proc2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ALTER PROCEDURE [dbo].[proc2]
    AS
    BEGIN
        declare @t int;
        exec proc1 @t output
        INSERT INTO matable2(champs2) VALUES('pouet2')
        SELECT @@identity AS resultat2
    END
    Merci beaucoup pour votre aide

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 17h48
  2. Imbrication de procédures stockées
    Par ed222 dans le forum Développement
    Réponses: 4
    Dernier message: 21/06/2010, 11h07
  3. imbrication de procédures stockées
    Par flogreg dans le forum C#
    Réponses: 16
    Dernier message: 01/08/2008, 17h05
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 11h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 13h27

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