2010-11-02 92 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;