|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : janvier 2011 Messages : 8 ![]() |
Bonjour à tous,
J'aimerais savoir si quelqu'un a une solution pour ce problème fort probablement simple pour les experts. Dans mon cas, je sèche... Voici, je dois faire une copie partielle (quelques colonnes, plusieurs lignes) de plusieurs tables d'une bd à une autre table d'une autre bd. Le problème est le suivant, dans certains cas, j'ai une table avec des clefs référencés d'une autre table. Après la copie, les clefs référencés ne sont plus valide car l'identifiant de la table de référence n'est plus le même après la copie. ex: bd1.TableA copie de colonne (Nom,Truc) dans bd2.TableA bd1.TableB copie de colonne (IDLigneTableA,Machin) dans bd2.TableB Dans la bd2.TAbleB, la colonne IDLigneTableA n'est plus valide car celui-ci à changé lors de la copie de la tableA. Il faudrait donc altérer la ligne IDLigneTAbleA en fonction du changement de clef primaire entre bd1.TableA et bd2.TAbleA. Donc, pour une ligne, c'est simple: alter table bd2.TableB(IDLigneTableA) values (bd2.TableA.IDligne1) where IDLigneTableA = bd1.TableA.IDligne1 mais comment faire pour l'ensemble des lignes des tablesA (10000 Merci à l'avance. |
|
|
00
|
|
|
#2 |
|
Membre à l'essai
![]() Fabrice FloresAdministrateur de base de données Inscription : décembre 2011 Messages : 17 ![]() |
Pourquoi ne conserves-tu pas les clés existantes?
Tu peux insérer tes propres valeurs dans un champ identity en passant l'instruction suivante en début de code: SET IDENTITY_INSERT TableA ON puis celle-ci en fin de code: SET IDENTITY_INSERT TableA OFF Si tu tiens absolument à générer de nouvelles clés, j'aurais fait la chose suivante: J'aurais copié mes tables de la Bd1 à la Bd2 en faisant la chose suivante: Pour chaque table comportant des clés étrangères, par exemple la table B avec la clé étrangère IdTableA, j'aurais ajouté un champ IdTableA_Old. J'aurais laissé le champ IdTableA vide et conservé les anciennes valeurs de clé dans IdTableA_Old. Pour les tables dont l'ID est référencé dans des clés étrangères, j'aurais fait la même chose avec le champ ID. Exemple: IdA et IdA_Old Ensuite j'aurais mis à jour ma table B en faisant: Update TableB Set IdTableA=(Select IdA From TableA where TableA.IdA_Old=TableB.IdTableA_Old) Puis j'aurais terminé en supprimant mes champs _Old J'espère avoir été clair dans mes explications... |
|
|
00
|
|
|
#3 | |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 725 ![]() |
Citation:
++ |
|
|
00
|
|
|
#4 | |
|
Invité régulier
![]() Inscription : janvier 2011 Messages : 8 ![]() |
Super,
Tes explications sont limpides comme de l'eau de roche fflores. Je pense qu'avec ta solution #2, tout va fonctionner. Je ne peux pas utiliser la #1 (INSERT_IDENTITY) p.c.que je ne suis pas certains que la valeur insérée entrera en conflit avec d'autres éléments. Grooooos merci, tu m'évite au moins 10000 opération ''répétitive et répétitante'' Citation:
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com