比较来源 table 和暂存 table

Compare between source table and staging table

我正在将我的员工 table 从源加载到暂存区,如下所示:

SRC 包含一个 T-SQL 查询:

SELECT EmpId,Firstname,Lastname,DeptId,Email,PhoneNumber From dbo.Employee

查找如下所示:(重定向到无匹配输出)

示例:

EmpId Firstname Lastname DeptId Email PhoneNumber
55    Alex      Yves     3      NULL  NULL

如果 STG 中不存在 EmpId table,将添加它。 如果 EmpId=55 在源中有如下更新:

EmpId Firstname Lastname DeptId Email            PhoneNumber
55    Alex      Yves     3      alex@company.com +1234567

一旦在查找匹配输出后检测到更新,因为 EmpId 已经存在,更新将仅影响 EmpId=55,而不像我一样影响所有现有的。

我只想更新有更新的记录。如何检测 STG table.

中已有员工的更新

要回答您的问题,您需要通过两种方式更改查找组件:

  • 将缓存选项更改为无缓存
  • 在连接选项卡中,使用 SQL 查询合并来自目标 table 和阶段 table
  • 的员工 ID

由于以下几个原因,这个解决方案会非常慢:

  • 无缓存选项将为每一行查询目标和阶段table
  • 对每一行执行更新
  • 您可能会在 3 个组件之间经常出现死锁

性能更好的解决方案是将所有记录插入阶段 table,然后使用执行 sql 任务插入和更新目标 table.