如何比较SSIS中的两个表? (SQL Server)

时间:2014-01-13 10:42:28

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

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

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

这些是我的表格:

TABLE1

ID
状态

TABLE2

ID
状态

表3

ID
状态

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

3 个答案:

答案 0 :(得分:11)

如果您的表格不大,您可以使用完全缓存进行Lookup转换,但我不推荐它,因为如果您的表格增长,您将遇到问题。我知道我做了。

我建议Merge Join转换。您的设置将包括以下内容:

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

This should help,正如文章解释几乎确切的问题/解决方案。

答案 1 :(得分:4)

我设法使用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'

答案 2 :(得分:2)

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

如果两个表都是Sql表,那么请按照以下步骤进行操作

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

    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'
    

    我认为这对你有用。