首页 > 解决方案 > 在 SQL Server 中使用 Merge 语句

问题描述

在 sql server 中使用 Merge 我只需要从源表中加载 1 年的数据。请帮我建立逻辑。

 DATEADD(year,-1,getdate()) -- one year date
 
MERGE target_table USING source_table
ON merge_condition
WHEN MATCHED
    THEN update_statement
WHEN NOT MATCHED
    THEN insert_statement;

标签: sqlsql-servertsqlssismsbi

解决方案


正如拉努建议的那样:

MERGE target_table 
USING (SELECT * FROM source_table WHERE somedatecolumn > DATEADD(year,-1,getutcdate())) x
ON merge_condition
WHEN MATCHED
    THEN update_statement
WHEN NOT MATCHED
    THEN insert_statement

驱动合并的源表是合并中唯一涉及的数据。如果 source_table 有 1000 行,但去年只有 10 行,那么 MERGE 将操作超过 10 行。如果目标表有 10000 行,其中 7 行与源表的 10 行中的行匹配,则将进行 7 次更新和 3 次插入。目标表在操作结束时将有 10003 行


推荐阅读