我不是在寻找答案,而是更多地朝着正确的方向发展。我在包含客户信息的数据仓库服务器上有一个表,我想创建一个存储过程/作业,每晚从表的实时版本更新该表。但是,有很多记录,所以我不想每次都截断并重新填充这些数据。我想插入任何新记录并仅更新已更改的记录...例如客户电子邮件已更改。
我只是在寻找有关最佳方法的建议,以尽量减少系统开销。
非常感谢任何帮助!
答案 0 :(得分:3)
您没有说明您使用的是哪种数据库产品。但是一些现代风格的DMBS支持MERGE
SQL语句。例如Oracle has had it since 9i和SQL Server since 2005。 DB2 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;