【问题标题】:Compare between source table and staging table比较源表和暂存表
【发布时间】:2020-07-20 22:40:32
【问题描述】:

我正在将我的 Employee 表从源加载到暂存区,如下所示:

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,则会添加它。 如果 EmpId=55 在源中有如下更新:

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

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

我只想更新有更新的记录。如何检测 STG 表中已存在的 Employee 的更新。

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助——比图片更多。
  • 这是什么意思:我只想更新有更新的记录
  • @GordonLinoff 问题已更新。
  • @Uxio90 问题更新

标签: sql sql-server tsql ssis


【解决方案1】:

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

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

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

  • 无缓存选项将查询每一行的目标和暂存表
  • 为每一行执行更新
  • 这 3 个组件之间可能会经常出现死锁

更好的解决方案是将所有记录插入到阶段表中,然后使用执行 sql 任务插入和更新目标表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多