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

Développement SQL Server Discussion :

Imbrication de procédures stockées


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 53
    Points : 22
    Points
    22
    Par défaut Imbrication de procédures stockées
    Bonjour,

    Je dispose d'une table Emplacement (code_emplacement, capacité) sur laquelle j'ai crée une simple procédure "stockage_possible" qui, prenant en paramètre une quantité, dresse la liste, sous forme d'une table, des emplacements disponibles pour stocker cette quantité. Jusque là, ça va.

    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
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:	<Description,,>
    -- =============================================
    ALTER PROCEDURE [dbo].[stockage_possible]
    	@quantite float
    AS
    BEGIN
    	SET NOCOUNT ON;
    	SELECT code_emplacement AS emplacement_possible, capacite AS disponibilite from Emplacement
    					WHERE Emplacement.capacite >= @quantite
     
     
       END
    J'ai une 2ème table : Stock (ID_stock (PK), Code_article, Num_lot, Code_emplacement, quantite, ID_personne). Cette table est rempli à l'aide d'une procédure "réception".

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:	<Description,,>
    -- =============================================
    ALTER PROCEDURE [dbo].[reception] 
    	-- Paramètres de la procédure
    	  @ID_stock int
    	, @codearticle varchar(50)
        , @num_lot varchar(50)
        , @IDpers nchar(10)
        , @qte float
        , @empl varchar(50)
     
    AS 
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
       INSERT INTO Stock (
    	ID_stock
    	, Code_article
    	, Num_lot
    	, Code_emplacement
    	, quantite
    	, ID_personne)
     
    	VALUES (@ID_stock,@codearticle,@num_lot,@empl,@qte,@IDpers)
     
     
    END


    Seulement, je ne sais pas comment réutiliser les résultats de la procédure "stockage_possible". Peut-on les transformer en table temporaire? en fait, le code emplacement à insérer dans la table stock est censé être issu du résultat de "stockage_possible". Comment faire? Est-il possible de faire appel à la 1ère procédure dans la procédure "réception"? Le problème est que si plusieurs emplacements sont possibles pour le stockage, comment décider lequel sera choisi?... j'avoue que je suis un peu perdu.

    merci,

    Edouard.

  2. #2
    Membre du Club
    Homme Profil pro
    SQL Server
    Inscrit en
    Juin 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : SQL Server
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2010
    Messages : 43
    Points : 63
    Points
    63
    Par défaut
    Pour réutiliser les informations de la proc stock : stockage_possible

    Tu dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Create table #temp
    (
    emplacement_possible
    , disponibilite 
    )
     
    Insert into #temp
       stockage_possible [taValeur]
     
    select * from #temp
    et si tu as besoin de performance tu fais après le insert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Create NONCLUSTERED INDEX Id1 ON #temp(emplacement_possible)

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 53
    Points : 22
    Points
    22
    Par défaut
    Bonjour et merci pour votre réponse.

    Seulement je ne vois pas où je dois faire la création de cette table temporaire.
    Dans ma première procédure ("stockage_possible")?

    SELECT * FROM #temp va me rendre toutes les valeurs possibles d'emplacement. comment alors insérer une seule de ces valeurs dans les paramètres de la procédure "réception" ( @empl va devoir ne prendre qu'une valeur)?

    merci,

    Edouard.

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Il n'y a pas besoin de table temporaire

    Comment faire? Est-il possible de faire appel à la 1ère procédure dans la procédure "réception"? Le problème est que si plusieurs emplacements sont possibles pour le stockage, comment décider lequel sera choisi?
    Oui, vous pouvez utiliser les paramètres de type OUTPUT pour ce faire.

    Pour décider duquel doit être choisi, c'est à vous de voir : soit celui qui est le plus petit, soit le plus grand, soit celui qui a reçu un stock il y a très longtemps, ...

    @++

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 53
    Points : 22
    Points
    22
    Par défaut
    Bonjour Elsuket,

    une nouvelle fois merci pour ces infos,

    Edouard.

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, 16h48
  2. imbrication de procédures stockées
    Par flogreg dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/08/2008, 16h06
  3. imbrication de procédures stockées
    Par flogreg dans le forum C#
    Réponses: 16
    Dernier message: 01/08/2008, 16h05
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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