2010-11-02 90 views
0

我不是在尋找答案,而是在正確的方向上推動更多。我在包含客戶信息的數據倉庫服務器上有一個表,我想創建一個存儲過程/作業,從表的實時版本每晚更新該表。但是,有很多記錄,所以我不想每次都截斷並重新填充數據。我想插入任何新記錄並僅更新已更改的記錄...例如客戶電子郵件已更改。SQL僅更新表中新的或更改的記錄

我只是尋求最好的方法來解決這個問題,以儘量減少系統開銷的建議。

任何幫助,非常感謝!

+2

您正在使用哪個數據庫?哪個版本? – 2010-11-02 22:10:21

+0

每天更新多少條記錄?有多少是全新的? – 2010-11-02 22:12:20

回答

3

你不說你正在使用哪種數據庫產品。但是一些現代風格的DMBS支持MERGE SQL語句。例如Oracle has had it since 9iSQL Server since 2005。 (不知道IBM何時推出它)。

MySQL的等價物是ON DUPLICATE KEY UPDATE,它不是很通用。

如果您的數據庫不支持您需要手動編寫UPSERT語句的語法。這將是表格

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;