2010-11-02 13 views
0

Je ne cherche pas une réponse ici plutôt plus d'une poussée dans la bonne direction. J'ai une table sur un serveur de datawarehouse contenant l'information de client, et je voudrais créer une procédure stockée/travail qui met à jour cette table tous les soirs de la version vivante de la table. Cependant, il y a beaucoup d'enregistrements, donc je ne veux pas tronquer et re-peupler ces données à chaque fois. Je voudrais insérer de nouveaux enregistrements et mettre à jour uniquement les enregistrements qui ont changé ... par exemple, un e-mail client a été modifié.Mise à jour SQL uniquement enregistrements nouveaux ou modifiés dans la table

Je cherche simplement des suggestions sur la meilleure façon d'aborder cette question pour minimiser les frais généraux sur le système.

Toute aide est grandement appréciée!

+2

Quelle base de données utilisez-vous? Quelle version? –

+0

Combien d'enregistrements par jour sont mis à jour? Combien sont neufs? –

Répondre

3

Vous ne dites pas quel produit de base de données vous utilisez. Mais certaines versions modernes de DMBS prennent en charge l'instruction SQL MERGE. Par exemple Oracle has had it since 9i, et SQL Server since 2005. DB2 version 9 has it (ne sait pas quand IBM l'a introduit).

L'équivalent MySQL est ON DUPLICATE KEY UPDATE, ce qui n'est pas aussi polyvalent.

Si votre base de données ne supporte pas la syntaxe, vous devrez utiliser une instruction UPSERT. Ce sera de la forme

begin 
    update your_table 
      set col1 = 23 
      when pk_col = 42; 
exception 
    when no_data_found then 
     insert into your_table (pk_col, col1) 
     values (42, 23); 
end;