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 :

Procédure stockée avec boucle


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Par défaut Procédure stockée avec boucle
    Bonjour,

    je développe une petite application dans laquelle j'inscris dans ma BD un nouveau membre. Pour chacun des membres j'ai la possibilité de sélectionner un certain nombre d'options dont le nombre peut varier.

    J'utilise une procédure stocké qui inscrit le nouveau membre dans ma table "membres" et j'ai une autre table "options" qui reprend la liste des options choisies par chacun des membres.

    Mon problème est que je ne vois pas trop comment dans ma procédure stocké 1° récupérer la liste d'option en paramètres et 2° comment boucler pour enregistrer les options pour un membre dans la table "options".

    L'inscription du membre en elle même se fait correctement.

    Auriez-vous une idée?

    Merci

  2. #2
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Postez la DLL de votre table options.
    Quel est la version de SQL SERVER?
    Si 2008 ou plus utilisez les TVP.
    http://blog.sqlauthority.com/2008/08...l-server-2008/

  3. #3
    Membre éclairé
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Par défaut
    Bonjour et merci pour votre aide,

    en fait ma table 'Option' s'appelle cours (qui reprend tous les cours donnés) et voici sa structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE [dbo].[Cours](
    	[IDCours] [int] IDENTITY(1,1) NOT NULL,
    	[LibelleCours] [varchar](50) NOT NULL,
     CONSTRAINT [PK_Cours] PRIMARY KEY CLUSTERED 
    (
    	[IDCours] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
    j'ai également une table EleveCours qui permet de stocker la liste des cours suivis pour chacun des eleves. La structure est la suivante:

    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
     
    CREATE TABLE [dbo].[EleveCours](
    	[IDCours] [int] NOT NULL,
    	[IDEleve] [int] NOT NULL
    ) ON [PRIMARY]
     
    GO
     
    ALTER TABLE [dbo].[EleveCours]  WITH CHECK ADD  CONSTRAINT [FK_EleveCours_Cours] FOREIGN KEY([IDCours])
    REFERENCES [dbo].[Cours] ([IDCours])
    GO
     
    ALTER TABLE [dbo].[EleveCours] CHECK CONSTRAINT [FK_EleveCours_Cours]
    GO
     
    ALTER TABLE [dbo].[EleveCours]  WITH CHECK ADD  CONSTRAINT [FK_EleveCours_Eleve] FOREIGN KEY([IDEleve])
    REFERENCES [dbo].[Eleve] ([IDEleve])
    GO
     
    ALTER TABLE [dbo].[EleveCours] CHECK CONSTRAINT [FK_EleveCours_Eleve]
    Lors de l'inscription d'un élève, on peut sélectionner les cours qu'il va suivre et c'est cette "liste" que j'ai du mal à passer à ma procédure stockée. De plus, comment la traiter dans le procédure?

    Merci

  4. #4
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Pourquoi ne pas utiliser un paramètre de type table dans votre procédure pour envoyé la liste des cours ?

    En gros, ça donnerait quelque chose dans le genre :
    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
     
    CREATE TYPE [dbo].
    [LISTE_COURS] AS TABLE(
        [ID_COURS] [INT] NOT NULL
        PRIMARY KEY CLUSTERED 
    (
        [ID_COURS] ASC
    )WITH (IGNORE_DUP_KEY = OFF)
    )
    GO
     
    CREATE PROCEDURE UP_ELEVE_INSCRIPTION
        @NOM_ELEVE VARCHAR(30),
        @PRENOM_ELEVE VARCHAR(30),
        --AUTRE INFOS CONCERNANT L'ELEVE
        @COURS LISTE_COURS READONLY
    AS
    BEGIN
        SET NOCOUNT ON;
     
        INSERT INTO T_ELEVE(NOM,PRENOM/*AUTRE INFOS*/)
        VALUES(@NOM_ELEVE, @PRENOM_ELEVE);
     
        DECLARE @ID_ELEVE INT;
        SET @ID_ELEVE = SCOPE_IDENTITY();
     
        INSERT INTO ELEVECOURS(IDCOURS, IDELEVE)
        SELECT
                ID_COURS,
                @ID_ELEVE
        FROM
                COURS;
    END
    De cette manière, aucune vilaine boucle itérative dans ce beau langage ensembliste.

    Enfin c'est ce que moi je ferais. Etant encore loin d'être expert en la matière, je suggère tout de même d'attendre un autre avis pour confirmer ou infirmer ma méthode.

    ++

  5. #5
    Membre éclairé
    Profil pro
    IT Développeur
    Inscrit en
    Mars 2009
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Développeur

    Informations forums :
    Inscription : Mars 2009
    Messages : 274
    Par défaut
    Bonjour Kropernic

    je suis en train de regarder le lien donné par iberserk. Et j'ai effectivement créé une table type comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TYPE CoursType AS TABLE
    (
    CoursId INT, CoursNom VARCHAR(50)
    );
    GO
    mais j'ai encore du mal à voir comment passer ma liste.

    Merci

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Au moment de l'appel à votre procédure stockée dans votre code applicatif, c'est là que vous devez passer un paramètre de type table.

    Voici un article détaillé avec un exemple en VB.NET.

    Vous pouvez trouvé de nombre exemple de ce type à l'aide google

Discussions similaires

  1. [2008R2] Procédure stockée avec une boucle sur les resultat
    Par sak_ura dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/02/2013, 09h23
  2. Procédure stockée avec SELECT UNION
    Par maredami dans le forum Oracle
    Réponses: 4
    Dernier message: 07/11/2005, 11h05
  3. Procédure stockée avec serveur lié et paramètres
    Par AITOZ dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/10/2005, 17h51
  4. Procédure stockée avec param de sortie:marchepas av ADO
    Par Fabby69 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/10/2004, 12h04

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