2011-06-30 3 views
2

Je dois déplacer certaines données stockées dans une table vers une autre à l'aide d'un script, en tenant compte des enregistrements existants qui figurent déjà dans la table de destination ainsi que des relations exister.Insertion en toute sécurité des données de ligne d'une table à une autre - SQL

Je suis curieux de connaître la meilleure méthode pour ce faire qui a un impact relativement faible sur les performances et peut être inversée si nécessaire. Au début, je ne déplacerai qu'un seul enregistrement pour assurer le bon déroulement du processus, mais il sera responsable du déplacement de 1650 lignes environ.

Quelle serait la meilleure approche à adopter ou existe-t-il une meilleure alternative?

Edit:

Ma suggestion précédente d'utiliser MERGE ne fonctionne pas comme je fonctionner dans l'environnement SQL Server 2005, et non 2008 comme mentionné précédemment.

Répondre

2

la question ne donne pas de détails, donc je ne peux fournir aucune réelle du code réelle, juste ce plan d'attaque:

étape 1 écrivez une requête qui sélectionnera seulement les lignes que vous devez copier. Vous devrez JOIN et/ou filtrer (WHERE) ces données pour inclure uniquement les lignes qui n'existent pas déjà dans la table de destination. Faites en sorte que la liste des colonnes soit exactement la même que les colonnes de la table de destination, dans l'ordre des colonnes et le type de données.

étape 2 transformez cette instruction SELECT en INSERT en ajoutant INSERT YourDestinationTable (col1, col2, col3..) avant la sélection.

étape 3 si vous voulez seulement essayer une seule ligne, ajouter un TOP 1 à la partie de sélection de la nouvelle INSERET - SELECT command, vous pouvez exécuter à nouveau cette commande autant de fois que nécessaire avec/sans TOP parce qu'il doit éliminer tout lignes que vous ajoutez par les JOIN s et WHERE conditions dans le SELECT

à la fin, vous aurez quelque chose qui ressemble à:

INSERT YourDestinationTable 
     (Col1, Col2, Col3, ...) 
    SELECT 
     s.Col1, s.Col2, s.Col3, ... 
     FROM YourSourceTable    s 
      LEFT OUTER JOIN SomeOtherTable x ON s.Col4=x.Col4 
     WHERE NOT EXISTS (SELECT 1 FROM YourDestinationTable d WHERE s.PK=d.PK) 
      AND x.Col5='J' 

Je lis la question insérer uniquement les lignes manquantes d'une table source dans une table de destination. Si les modifications doivent également être migrées, avant les étapes ci-dessus, vous devrez effectuer un UPDATE de la table de destination rejoignant la table source. Ceci est difficile à expliquer sans plus de détails sur les tables, les colonnes, etc.

+0

Merci pour l'information KM! –

+0

Pour répondre à votre question, je ne vais insérer que des lignes qui n'existent pas déjà, il n'y aura pas besoin de mettre à jour quoi que ce soit en utilisant une méthode similaire par la suite. –

1

Oui, l'instruction MERGE est idéal pour les importations en vrac si vous exécutez SQL Server 2008.

Questions connexes