【问题标题】:How to compare two tables in SSIS? (SQL Server)如何比较 SSIS 中的两个表? (SQL 服务器)
【发布时间】:2014-01-13 10:42:27
【问题描述】:

我正在创建一个 SSIS 包,它将比较两个表,然后在另一个表中插入数据。

我应该使用哪个工具?我尝试使用“条件拆分”,但它看起来只需要一个表作为输入,而不是两个。

这些是我的桌子:

表 1

身份证
状态

表2

身份证
状态

表3

身份证
状态

我想比较两个表中的 STATUS 字段。如果 TABLE1 中的状态为“Pending”,而 TABLE2 中的状态为“Open”,则将此记录插入 TABLE3。

【问题讨论】:

  • 你的桌子有多大?
  • 非常小。 TABLE1 和 TABLE2 中的记录均少于 1000 条。
  • Merge Join 组件可能是个不错的选择

标签: sql-server ssis sql-server-2012


【解决方案1】:

如果您的表不大,您可以使用带有完整缓存的Lookup 转换,但我不建议您这样做,因为如果您的表增长,您会遇到问题。我知道我做到了。

我会推荐Merge Join 转换。您的设置将包括以下内容:

  • 两个数据源,一个表
  • 两个Sort转换,因为Merge Join转换需要排序输入;我猜你需要使用 ID 匹配记录,所以这将是一个排序标准
  • 一个Merge Join 转换连接两个(左和右)数据流
  • 一个Conditional Split 转换来检测表中是否存在正确的状态
  • 任何额外需要的转换(例如 Derived Column 以引入您必须插入到目标表的数据)
  • 要插入目标表的一个数据目标

This should help,因为文章解释了几乎准确的问题/解决方案。

【讨论】:

    【解决方案2】:

    我设法通过使用Execute SQL Task 工具并在其中编写以下查询来做到这一点。

    INSERT INTO TABLE3 (ID, Status) 
    SELECT * FROM TABLE1 t1, TABLE2 t2 
    WHERE t1.ID = t2.ID and t1.status = 'Pending' and t2.status = 'Open'
    

    【讨论】:

    • 你甚至不需要 SSIS。您可以创建一个 SQL 代理作业并创建一个类型为 Transact-SQL Script (T-SQL) 的步骤
    • 感谢您的提示。非常有帮助,因为我对此一无所知。但就我而言,在运行此查询之前我还要执行一些其他操作,因此我必须使用 SSIS。
    • 不要将这个讨论扩展得太远......您也可以在 SQL 代理作业中执行这些操作。但不管你最舒服。 SSIS 确实看起来更好。
    【解决方案3】:

    我想这就是你要找的东西。?

    在您的情况下,如果两个表都是 Sql 表,请按照以下步骤操作

    1. 拖动数据流任务
    2. 编辑数据流任务添加 Oledb 源并在 sql 命令中粘贴以下 sql 代码
    3. 添加 oledb 目标并使用 table3 映射列

    sql代码

    select b.id,b.status
    from table1 a
    join table2 b on a.id = b.id
    where a.status = 'Pending' and b.status = 'open'
    

    我认为这对你有用。

    【讨论】:

      猜你喜欢
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2015-05-07
      • 1970-01-01
      相关资源
      最近更新 更多