Je cherche des conseils et/ou une méthode pour transférer des données contenues dans plusieurs tables d'une BDD 1 vers une table appartenant à une BDD 2.
Bien entendu les structures des tables sont différentes ;-)
Je peux surement utiliser plusieurs solutions. Ayant déjà des controller et des entity pour la BDD2, je me disais que je pouvais faire une petite application pour pouvoir transférer mes données "facilement" et je m'en resservirai le jour où je voudrai mettre en prod.
Si ta table de destination est définie, et que tu sais quelles colonnes des tables sources correspondent à telles colonnes de la table de destination, alors tu peux faire cela en SQL. Du genre :
INSERT INTO bdd_destination.table_destination ( col1, col2, col3, etc. )
SELECT
T1.cola,
T2.colb,
T3.colc,
etc.
FROM
bdd_source.table_source1 T1
INNER JOIN bdd_source.table_source2 T2
ON T1.colonne_lien1 = T2.colonne_lien2
INNER JOIN bdd_source.table_source3 T3
ON T2.colonne_lien2 = T3.colonne_lien3
etc.
J'ai bien lu ton code sql et voici ce que j'envisage de faire :
Mes BDD sont sur des serveurs différents. Je vais faire des exports pour créer les bases en local. Ensuite je vais créer une ou des procédures stockées pour mettre le code comme ci-dessus ( je dois sélectionner des données dans plusieurs tables de bdd_source pour les mettre dans une seule table dans dbb_destination).
ça change la donne en effet. Personnellement, je vois deux solutions.
Soit faire un dump SQL de la base source pour la recréer à l'identique sur le serveur de destination et procéder comme proposé précédemment pour remplir la nouvelle table sur le serveur de destination.
Soit créer la table de destination sur le serveur source, la remplir comme proposé précédemment, l'exporter seule et l'importer sur le serveur de destination.
J'ai utilisé excel et des formules pour transférer certaines de mes données: quand il fallait rester dans la même table dans les deux bases.
J'ai fais une procédure stockée pour les cas plus complexes. Un exemple:
DELIMITER |
CREATE PROCEDURE transfert_enfants()
BEGIN
DECLARE nom_e,prenom_e, nom_p,prenom_p, genre_e VARCHAR(50);
DECLARE datnaiss_e DATE;
DECLARE idParent INT;
DECLARE adresseParent, villeParent VARCHAR(50);
DECLARE cpParent INT;
DECLARE typ_pers_id_e, civ_id_e, uti_id_e, mat_id_e, csp_id_e, typ_dem_id_e CHAR(3);
DECLARE enfant_id, cab_id_e INT;
DECLARE CursEnfant CURSOR
FOR
SELECT E.nome, E.prenome, E.datenaissancee, E.genre, P.nom, P.prenom
FROM essai.enfant E, essai.client P
WHERE E.id_client = P.id_client;
OPEN CursEnfant;
enfant_loop: LOOP
FETCH CursEnfant INTO nom_e, prenom_e, datnaiss_e, genre_e, nom_p, prenom_p;
IF genre_e ='M' THEN
SET typ_pers_id_e = 'MAS';
SET civ_id_e = '1';
ELSE
SET typ_pers_id_e = 'FEM';
SET civ_id_e = '3';
END IF;
SET uti_id_e = '2';
SET cab_id_e = '1';
SET mat_id_e ='CEL';
SET csp_id_e ='9';
SET typ_dem_id_e = 'CLI';
BLOCK2: BEGIN
DECLARE done INT DEFAULT 0;
DECLARE CursParent CURSOR
FOR
SELECT pers_id, pers_adresse, cp_auto_code, pers_ville
FROM courta_dev.personne
WHERE pers_nom like nom_p
AND pers_phys_prenom like prenom_p;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN CursParent;
parent_loop: LOOP
FETCH CursParent INTO idParent,adresseParent,cpParent,villeParent;
IF done THEN
LEAVE parent_loop;
END IF;
INSERT INTO courta_dev.personne (pers_nom, pers_phys_prenom, pers_date_naissance, pers_adresse, pers_ville, cp_auto_code,type_pers_id, civ_id, uti_id, mat_id, csp_id, typ_dem_id,cab_id)
VALUES (nom_e,prenom_e,datnaiss_e, adresseParent, villeParent,cpParent, typ_pers_id_e, civ_id_e, uti_id_e, mat_id_e, csp_id_e, typ_dem_id_e, cab_id_e);
SET enfant_id = LAST_INSERT_ID();
INSERT INTO courta_dev.lien_pers (typ_lien_id,pers_id,pers_id_Personne)
VALUES ('P',idParent,enfant_id);
END LOOP parent_loop;
CLOSE CursParent;
END BLOCK2;
END LOOP enfant_loop;
CLOSE CursEnfant;
END|
Merci pour tes conseils.
Virgi
Transférer des données d'une BDD vers une autre
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.