比较来源 table 和暂存 table
Compare between source table and staging table
我正在将我的员工 table 从源加载到暂存区,如下所示:
SRC 包含一个 T-SQL 查询:
SELECT EmpId,Firstname,Lastname,DeptId,Email,PhoneNumber From dbo.Employee
查找如下所示:(重定向到无匹配输出)
- 查找不匹配输出:在暂存中插入新记录table
员工
- 查找匹配输出:用新消息更新旧记录
来自来源
示例:
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.
我正在将我的员工 table 从源加载到暂存区,如下所示:
SRC 包含一个 T-SQL 查询:
SELECT EmpId,Firstname,Lastname,DeptId,Email,PhoneNumber From dbo.Employee
查找如下所示:(重定向到无匹配输出)
- 查找不匹配输出:在暂存中插入新记录table 员工
- 查找匹配输出:用新消息更新旧记录 来自来源
示例:
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.