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 :

2 instruction SELECT dans procédure stockée


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Par défaut 2 instruction SELECT dans procédure stockée
    Bonjour à tous,
    Je débute dans les procédures stockées et je souhaite faire 2 instructions SELECT à chaque requête.

    J'ai une table articles et une table url, comme vous l'aurez sûrement compris ces tables sont liées sur le principe q'un article peut avoir plusieurs url.

    Voici la structure de la table articles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE articles (
      article_id INT IDENTITY(1,1) NOT NULL,
      id_produits_ INT NOT NULL,
      id_acces_ INT NOT NULL,
      id_titre_traduction_ INT NULL,
      id_commentaire_traduction_ INT NULL,
      titre VARCHAR(250) NULL,
      commentaire VARCHAR(8000) NULL,
      type_telechargement BIT NOT NULL,
      date_publication DATETIME NULL,
      date_maj DATETIME NULL,
      PRIMARY KEY(article_id),
    );
    Voici la structure de la table url:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE url (
      id_url INT IDENTITY(1,1) NOT NULL,
      article_id_ INT NOT NULL,
      titre_url VARCHAR(200) NULL,
      lien_url VARCHAR(200) NULL,
      PRIMARY KEY(id_url),
    );
    Je précise que j'ai créer une contrainte de clé étrangère à part sur articles.article_id=url.article_id_

    Ce que je souhaite faire concrètement:
    • pour chaque articles afficher la liste des url.


    Voici ce que j'ai déjà fait:

    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
     
    CREATE PROCEDURE select_telechargement
    @id_art int
    @id_prod int
    AS
    BEGIN
     
    DECLARE @id_art int
    DECLARE @id_prod int
    SELECT article_id, titre, commentaire FROM articles
    WHERE type_telechargement = 1 AND id_produits_=@id_prod
     
    SELECT @id_art = scope_identity()
     
    SELECT titre_url, lien_url FROM url
    WHERE article_id_ = @id_art
     
    END
    J'aimerais avoir vos avis et votre aide,
    merci d'avance

  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 009
    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 009
    Billets dans le blog
    6
    Par défaut
    SCOPE_IDENTITY() fournit le dernier auto incrément calculé d'après le dernier INSERT dans l'étendue de code. Or il n'y a aucun INSERT dans votre code !

    A lire sur les auto incrément : http://blog.developpez.com/sqlpro/p6...ec-sql-server/

    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 confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Par défaut
    Merci SQLpro pour ta réponse,
    Je dois donc enlèver le SCOPE_IDEBTITY(),
    mais que dois-je mettre à la place pour récupérer l'ID retourner par la première instruction SELECT?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    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 009
    Billets dans le blog
    6
    Par défaut
    Une jointure !!! Nous somme dans un univers ensembliste, pas dans un univers itératif, vous ne pouvez donc par conséquence pas passer par une variable !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT article_id, titre, commentaire 
    FROM   articles
    WHERE  type_telechargement = 1 
      AND  id_produits_=@id_prod;
     
    SELECT titre_url, lien_url 
    FROM   url AS U
           INNER JOIN articles AS A
                 ON U.article_id = A.article_id
    WHERE  type_telechargement = 1 
      AND  id_produits_=@id_prod;
    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/ * * * * *

  5. #5
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Par défaut
    Merci encore pour ton aide.
    Mais le problème est tes 2 requêtes se font indépendamment l'une de l'autre.
    Or je cherche à ce que ces 2 requête soit liées pour pouvoir récupérer par la suite un résultat et l'afficher.
    Précédemment je tentais de faire une procédure stockée. Car je pense que c'est peut-être la seule façon d'arriver à ce que je veut faire.

    En gros, ce que je veut faire:
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    //on créer la connexion
    string StrCon = "....";
    SqlConnection cxn2 = new SqlConnection(strCon);
            try
            {
                //ouverture de la connexion 
                cxn2.Open();
     
                //Requête SQL ou appel de la procédure
                string StrCmdArt = "SELECT article_id, titre, commentaire, date_publication FROM articles WHERE type_telechargement = 1 AND id_produits_=@id_prod; SELECT titre_url, lien_url FROM url AS U INNER JOIN articles AS A ON U.article_id_ = A.article_id WHERE  type_telechargement = 1 AND  id_produits_=@id_prod;";
                SqlCommand CmdArt = new SqlCommand(StrCmdArt, cxn2);
     
                //paramétres
                CmdArt.Parameters.Add("@id_prod", SqlDbType.Int, 10);
                CmdArt.Parameters["@id_prod"].Value = produit;
     
                //on éxécute la requête avec un reader
                SqlDataReader lecteur = CmdArt.ExecuteReader();
                while (lecteur.Read())
                {
                    int id_art = (int)lecteur["article_id"];
                    string titre = (string)lecteur["titre"];
                    string comment = (string)lecteur["commentaire"];
     
                    DateTime date = (DateTime)lecteur["date_publication"];
     
                    //on place le résultat dans la <div> contenu
                    contenu.InnerHtml = string.Format("<h3>" + titre + "</h3>" + comment + "<p>Mise à jour le: " + date + "</p>");
     
                }
                //---->>>> Je souhaite ici afficher la liste des url 
                //---->>>> éventuellement par un foreach ou while
                //---->>>> contenu.InnerHtml += string.Format("<a href=''+lien_url+''">"+titre_url+"</a>");
     
            }
            catch (Exception err)
            {
                Response.Write(err.Message);
            }
     
            finally
            {
                cxn2.Close();
            }
     
        }
    Voila, j'espère que vous aurez à peu prêt compris.
    Merci d'avance pour votre aide.

  6. #6
    Membre chevronné Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Par défaut .Net sait gérer plusieurs recordsets en retour d'une procédure stockée
    Bonjour,

    Avec un datareader il faut utiliser la méthode NextResult().

    @+

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/01/2007, 11h20
  2. Alter table dans procédure stockée
    Par mehitabelle dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/11/2005, 17h14
  3. Réponses: 7
    Dernier message: 16/09/2005, 11h14
  4. procédures stockées dans procédure stockée
    Par olivc dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 30/05/2005, 17h58
  5. SQL dans Procédure stockée
    Par julure dans le forum Oracle
    Réponses: 13
    Dernier message: 02/11/2004, 17h57

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