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

Développement SQL Server Discussion :

copie inter bd avec changement de foreign keys


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingenieur aut. & ctrl
    Inscrit en
    Janvier 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingenieur aut. & ctrl

    Informations forums :
    Inscription : Janvier 2011
    Messages : 13
    Points : 20
    Points
    20
    Par défaut copie inter bd avec changement de foreign keys
    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.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Points : 22
    Points
    22
    Par défaut Bonjour Tremblou
    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...

  3. #3
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    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.
    Pourquoi l'identifiant change-t-il ? Est ce que ce changement peut se faire plusieurs fois ?

    ++

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingenieur aut. & ctrl
    Inscrit en
    Janvier 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingenieur aut. & ctrl

    Informations forums :
    Inscription : Janvier 2011
    Messages : 13
    Points : 20
    Points
    20
    Par défaut solved!
    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'' .

    Pourquoi l'identifiant change-t-il ? Est ce que ce changement peut se faire plusieurs fois ?
    p.c.que lors de la copie des colonnes dans la bd2, de nouvelles lignes sont crées et un nouveau identifiant unique est généré pour chaque lignes crée. Celui-ci est différent de la table d'origine (bd1).

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

Discussions similaires

  1. [2008] Instruction insert en conflit avec la contrainte foreign key
    Par bza88 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/11/2014, 13h03
  2. [2012] Problème de conflit d'ALTER TABLE avec la contrainte FOREIGN KEY
    Par Caliimero dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/03/2014, 20h03
  3. Erreur: conflit avec la contrainte FOREIGN KEY SAME TABLE
    Par useretl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/10/2007, 13h27
  4. copie de bases et pb de FOREIGN KEY
    Par zoungern dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/08/2005, 12h31
  5. pbm avec les foreigns keys.....
    Par j_bonc dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 11/06/2004, 11h23

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