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

SQL Firebird Discussion :

copier une ligne dans une autre table


Sujet :

SQL Firebird

  1. #1
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 100
    Points : 64
    Points
    64
    Par défaut copier une ligne dans une autre table
    salut,

    comment faire :
    une insertion d'un produit dans une premiere table qui est ensuite copié dans une deuxieme table avec son nouvel ID ?

    j'ai pensé à :
    1ere solution, créer un trigger after insert et ensuite récupérer la derniere ligne puis reinserer dans l'autre table... mais ca m'a l'air un bizarre.

    2eme solution, apres la premiere insertion je récupere l'id de la derniere ligne de la table puis, je reinsere dans la nouvelle table ?

    3eme solution, une fonction copie ca existe ?
    "Un peu d'huile, de la viande, du broco et j'obtiens un bon BoeufBrocoli !"

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    J'envisage la 1 ère solution.
    Puis-je avoir ton script ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Aucune des trois.

    Mais la solution la plus fiable se base sur le début de la solution 1 :

    Donc utilisation d'un trigger after insert dans lequel on met un ordre inser dans l'autre table. Les données sont récupérés graces aux variables NEW.NomDeLaColonne1 etc...


    Surtout ne pas essayer de récuperer la dernière ligne insérée, cette méthode ne marche pas systématiquement surtout en environnement multi-utilisateurs.

  4. #4
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 100
    Points : 64
    Points
    64
    Par défaut
    okay !

    merci du tuyau

    :-)
    "Un peu d'huile, de la viande, du broco et j'obtiens un bon BoeufBrocoli !"

  5. #5
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 100
    Points : 64
    Points
    64
    Par défaut
    excuse moi Wolo j'avais posé la question et je n'avais pas encore "scripté" les triggers....
    ben maintenant g fais quelques testes voici mes scripts :

    j'ai 2 tables : TESTTAB et TESTTAB2
    les champs de TESTTAB sont :
    idtesttab, nom, description

    les champs de TESTTAB2 sont :
    idtesttab2, idtesttab, designtesttab2

    Pour TESTTAB :
    j'ai créé un trigger : BEFOREINSERTTESTTAB avec un GEN_ID + 1

    puis j'ai créé un autre trigger : AFTERINSERTTESTAB qui va me copier l'idtesttab de TESTTAB (que je viens de creer précédemment avec BEFOREINSERTTESTTAB) dans le champ idtesttab de TESTTAB2 et en même temps je copie les données de 'nom' inserer dans TESTTAB dans 'designtesttab2' dans TESTTAB2.

    Pour TESTTAB2 :
    j'ai créé un trigger : BEFOREINSERTTESTTAB2 avec un GEN_ID + 1 (afin d'auto-incrémenter l'id de celle-ci de 1)

    Passons au script de AFTERINSERTTESTTAB de TESTTAB (qui nous interesse plus particulièrement) :
    --------------- SCRIPT TRIGGER -------------------------------------
    create trigger afterinserttesttab for testtab
    active after insert position 0
    as
    begin
    insert into testtab2 (idtesttab2,idtesttab,designtesttab2) values (gen_id(gen_testtab2,1),gen_id(gen_testtab,0),new.nom);
    end;
    ---------------- SCRIPT TRIGGER -------------------------------------
    voilaaa j'espère que ca aide...
    "Un peu d'huile, de la viande, du broco et j'obtiens un bon BoeufBrocoli !"

  6. #6
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Attention en faisant comme ça il y a un risque de mélange de données....
    Et en plus le second trigger pour générer un id n'est pas utilisé (mais ca par contre ce n'est pas grave)

    Il faut faire plutot comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TRIGGER afterinserttesttab FOR testtab
    ACTIVE AFTER INSERT POSITION 0
    AS
    BEGIN
      insert into testtab2 (idtesttab2,idtesttab,designtesttab2) VALUES (gen_id(gen_testtab2,1), new.idtesttab, new.nom);
    END;
    oubien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TRIGGER afterinserttesttab FOR testtab
    ACTIVE AFTER INSERT POSITION 0
    AS
    BEGIN
      insert into testtab2 (idtesttab,designtesttab2) VALUES (new.idtesttab, new.nom);
    END;

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/05/2015, 10h44
  2. Récupérer une information d'une ligne dans une table
    Par Lebas dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/04/2013, 10h24
  3. Réponses: 6
    Dernier message: 16/06/2011, 12h45
  4. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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