SQL仅更新表中的新记录或已更改记录

时间:2010-11-02 22:07:34

标签: sql insert

我不是在寻找答案,而是更多地朝着正确的方向发展。我在包含客户信息的数据仓库服务器上有一个表,我想创建一个存储过程/作业,每晚从表的实时版本更新该表。但是,有很多记录,所以我不想每次都截断并重新填充这些数据。我想插入任何新记录并仅更新已更改的记录...例如客户电子邮件已更改。

我只是在寻找有关最佳方法的建议,以尽量减少系统开销。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

您没有说明您使用的是哪种数据库产品。但是一些现代风格的DMBS支持MERGE SQL语句。例如Oracle has had it since 9iSQL Server since 2005DB2 version 9 has it(不知道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;