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

Langage SQL Discussion :

Procédure stockée, Select + Insert


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut Procédure stockée, Select + Insert
    Bonjour,


    Je suis en train de faire une procédure stockée sous SQL Server.

    Je voudrais faire un simple select puis récuperer chacune des lignes et faire un insert par la suite avec les données de la ligne.

    Voila mon simple select:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        -- Insert statements for procedure here
    	SELECT ActivityId, Title
    	FROM Portal_ActivitiesToLanguages
    	WHERE LangId = 4;

    Puis faire un Insert imbriqué au select ou pas?

    Ou alors comment puis je récuperer chaque ligne du select pour les consommer par la suite dans ma procédure stockée.



    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Est-ce que c'est ceci que tu cherches ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    -- Insert statements for procedure here
     
    INSERT INTO MaSecondeTable (Activity, Title, ZoneExtra)
    SELECT ActivityId, Title, 'Cette ligne a été ajoutée ...' As ZoneExtra
    FROM Portal_ActivitiesToLanguages
    WHERE LangId = 4;

  3. #3
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Ca devrait plus ressembler à ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	INSERT INTO Portal_ActivitiesToLanguages (Activity,'5', Tle)
    	SELECT ActivityId AS Activity , Title AS Tle
    	FROM Portal_ActivitiesToLanguages
    	WHERE LangId = 4;

    Mais il semble que j'ai une erreur.
    Je ne veux insérer dans la même table que je fais mon SELECT.
    En fait la requete consiste à créer une ligne lorsque LangId est égal à 4 et le remplacer par 5.



    [EDIT]
    Voila ca fonctionne!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	INSERT INTO Portal_ActivitiesToLanguages(ActivityId, LangId, Title)
    	SELECT ActivityId, '5' , Title
    	FROM Portal_ActivitiesToLanguages
    	WHERE LangId = 4;


    [/EDIT]


    Merci Christophe

  4. #4
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Bonjour,


    Je me retrouve avec un nouveau problème sur cette même procédure stockée.

    Prenons exemple sur cette requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	INSERT INTO Portal_ThematicsToLanguages (ThematicId, LangId, Title)
    	SELECT ThematicId, '5' , Title
    	FROM Portal_ThematicsToLanguages
    	WHERE LangId = 4;
    Dans la table 'Portal_ThematicsToLanguages' ThematicId et LangId sont les clés primaire de la table.

    Or dans ma requete lorsqu'il existe déja une ligne contenant le LangId = 5, la requete plante car il y a un doublon de clé primaire.



    Comment puis-je éviter cela?

    cordialemenent

  5. #5
    Scorpi0
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    INSERT INTO Portal_ThematicsToLanguages (ThematicId, LangId, Title)
    SELECT ThematicId, '5' , Title
    FROM Portal_ThematicsToLanguages t
    WHERE LangId = 4
    and not exists
    (
     select *
     from Portal_ThematicsToLanguages
     where ThematicId = t.ThematicId
     and Title = t.Title
     and LangId = 5
    )
    sinon un merge peut le faire aussi plus élégamment.

  6. #6
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Merci de ton aide.
    Cela fonctionne parfaitement

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

Discussions similaires

  1. [Procédure stockée] Select * into
    Par Gregory.M dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 17/03/2009, 14h18
  2. Réponses: 3
    Dernier message: 21/01/2008, 12h03
  3. Procédure stockée - Select
    Par lecitoyen dans le forum Langage SQL
    Réponses: 5
    Dernier message: 24/10/2007, 20h29
  4. procédure stockée : SELECT
    Par marcusien dans le forum SQL
    Réponses: 11
    Dernier message: 11/06/2007, 16h38
  5. Procédure stocké et insertion de données
    Par yancimer dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/08/2006, 17h33

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