8
votes

Y a-t-il un moyen d'insertion en vrac dans deux tables avec FK de l'une à l'autre?

Je vais donner un exemple pseudocode de ma méthode actuelle et si quelqu'un connaît une méthode qui ne fonctionne pas d'une ligne à la fois, je serais très appréciable. J'utilise MS SQL Server 2008.

Source:

1 a big  monkey
2 a tall elephant
3 a big  giraffe
4 a tiny cow
5 a tall cow

Dest:

Table 1       Table 2
monkey        1 big
elephant      2 tall
giraffe       3 big
cow           4 tiny
cow           5 tall


4 Réponses :


0
votes

Avec cette quantité de données, la meilleure option peut être d'isoler des mises à jour sur le système, autoriser Identity Insert et prépondérer les touches avant d'insérer.


ou, pouvez-vous simplement faire le premier insert, puis modifier l'insert pour la seconde (à partir d'une table temporaire) pour rejoindre les données d'origine et trouver la clé.


2 commentaires

De bonnes idées et merci, mais ... Je ne peux pas modifier la première table pour permettre l'insertion d'identité. La deuxième idée serait parfaite mais la raison pour laquelle j'ai besoin de la deuxième table avec une clé étrangère à la première est parce que les données que je suis inséré dans la première ne contiennent rien pour rendre chaque enregistrement unique. La deuxième table de destination contiendrait essentiellement l'identité de la table source. Voir Informations supplémentaires J'ai ajouté à la question.


Vous n'avez pas besoin de Modifier la table pour autoriser l'insertion d'identité - Vous devez juste avoir besoin de crocher votre instruction insert avec Set Identity_Insert sur et définissez identity_insert OFF.



0
votes

Utilisez identité_insert, une vue et un lieu de déclenchement et des valeurs d'identité prépopulées avec votre insert.

Voir ce violon SQL .

J'ai essayé de faire disparaître avec diverses choses au lieu de la gâchette pour que la colonne d'identité du T1 soit utilisée pour T2, mais j'ai finalement échoué.


0 commentaires

0
votes
insert into table1
select substring(src.data, 8 /* assuming fixed length as exampled */, len(src.data))
from source src

insert into table2
select t1.id, substring(src.data, 3 /* skip 'a ' */, 7)
from
    table1 t1
        inner join source src
        on substring(src.data, 8, len(src.data)) = t1.data
For the given example, i cannot do better...

0 commentaires

2
votes

Vous pouvez utiliser Fusionner sur table1 et sortie dans table2 . xxx

sql violon

Remarque: si TABLE2 a une clé étrangère définie contre Table1 Vous ne pouvez pas faire la sortie directement à Table2 . Dans ce cas, vous pouvez utiliser une table temporaire comme cible de la sortie et insérer dans table2 de la table temporaire.


0 commentaires