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 :

Insert ou Update lignes multiples


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut Insert ou Update lignes multiples
    Bonjour à tous,

    Je cherche à faire un Insert ou Update sur une ou plusieurs lignes en language SQL.
    Je m'explique, j'ai une table tblMaterialGived qui contient 3 champs :
    IdMaterialGived, IdBooking et IdMaterial.
    J'ai aussi une table "tblbooking" à plusieurs champs, dont IdBooking.
    Pour une ligne de ma table je peux donc avoir une ou plusieurs ligne dans tblMaterialGived.

    Ma question est, comment faire pour updater ou inserer (si il n'y a pas encore de ligne créer pour un booking donné) sur plusieurs ligne? Pour le moment, je fait un delete / insert, mais ce n'est pas très propre !

    J'espere avoir été claire et que quelqu'un pourra me donner des pistes

    Merci d'avance de votre aide.

    DeWaRs

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Il est parfaitement possible d'insérer/supprimer plusieurs lignes en une seule instruction via du SQL mais ta demande n'est pas très claire.

    Pourrais-tu commencer par poster le code que tu utilises actuellement (et que tu ne juges pas très propre) afin que nous puissions en savoir un peu plus.

    Merci.

  3. #3
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Bonjour,

    Merci de ta réponse. Pour le moment, lorsque j'update un booking, je fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "delete from tblMaterialGived where IdBooking = @IdBooking"
    puis un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "insert into [tblMaterialGived] ([IdBooking], [IdMaterial]) values (@IdBooking, @IdMaterial)"
    pour chaque materiel selectionné.

    Cela fonctionne très bien, mais je pense qu'un "update" serait plus "propre". Je me trompe?

    Cordialement.

    DeWaRs

  4. #4
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Ah oui effectivement, faire deux opérations au lieu d'une est légèrement mois propre.

    Et pourquoi n'as-tu pas codé en UPDATE directement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE tblMaterialGived
    SET IdMaterial = @IdMaterial
    WHERE IdBooking = @IdBooking
    PS : Les noms de tables, colonnes, etc... en Anglais, c'est mieux sans faute... Gived > Given

  5. #5
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Citation Envoyé par Scriuiw Voir le message
    Ah oui effectivement, faire deux opérations au lieu d'une est légèrement mois propre.

    Et pourquoi n'as-tu pas codé en UPDATE directement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE tblMaterialGived
    SET IdMaterial = @IdMaterial
    WHERE IdBooking = @IdBooking
    J'ai oublier de préciser que le IdMaterial était différent pour chaque ligne ! Du coup l'update "classique" ne fonctionne pas car cela m'update toutes les lignes avec la même valeur

    PS : Les noms de tables, colonnes, etc... en Anglais, c'est mieux sans faute... Gived > Given
    Je déteste les verbes irréguliers :s
    Je vais modifier le nom de ma table, merci

  6. #6
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Dans ce cas tu peux coder ton UPDATE ainsi en y ajoutant la sélection qui va bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE tblMaterialGived
    SET IdMaterial = 
      (SELECT IdMaterial
      FROM  Material
      WHERE ta_condition)
    WHERE IdBooking = @IdBooking

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Citation Envoyé par DeWaRs Voir le message
    J'ai oublier de préciser que le IdMaterial était différent pour chaque ligne ! Du coup l'update "classique" ne fonctionne pas car cela m'update toutes les lignes avec la même valeur
    Pour moi ces deux méthodes sont équivalente"*, à moins que tu ais des doublons sur IdBooking:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    delete from tblMaterialGived where IdBooking = @IdBooking
    //
    insert into [tblMaterialGived] ([IdBooking], [IdMaterial]) values (@IdBooking, @IdMaterial)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE tblMaterialGived
    SET IdMaterial = @IdMaterial
    WHERE IdBooking = @IdBooking

    Comme dans le deuxième cas tu passes en paramètre IdBooking, je ne vois pas pourquoi toutes les lignes se retrouvent avec la même valeur.
    Tu devrais tracer ton code pour voir ce qui est effectivement passé en paramètre à la requête.

    Tatayo.

    *: dans le premier cas, si tu mets en place des contraintes d'intégrité référentielle, tu risques d'avoir des problèmes bien plus grave qu'une lenteur de mise à jour...

  8. #8
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Hello,

    Merci de ta réponse, le problème est que j'ai effectivement des doublons sur IdBooking dans ma table tblMaterialGiven car un booking peut avoir plusieurs matériels. Je fais en fait une boucle sur le insert pour chaque matériel donné.

    Cordialement.

    DeWaRs

  9. #9
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Bonjour,

    J'ai finalement opté pour un delete / insert, le plus simple pour moi à implémenter.

    Cordialement.

    DeWaRs

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

Discussions similaires

  1. [2008] Trigger sur Update, lignes multiples
    Par FlorianC dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/02/2013, 15h12
  2. Réponses: 1
    Dernier message: 27/05/2009, 20h16
  3. Requête INSERT ou UPDATE avec saut de ligne
    Par CinErarY dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 02/05/2007, 04h38
  4. [Tableaux] seleted multiple insert puis update
    Par digger dans le forum Langage
    Réponses: 2
    Dernier message: 10/07/2006, 15h32

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