2015-09-10 36 views
0

我正在创建一个包,用于维护与源同步的目标表中的数据行。我所做的是首先使用查找来对目标中不存在的所有行执行复制。例如,我的两个表有一个ID,让说,在某个时刻,他们是这样的:使用SSIS删除行

来源:ID(1,2,3,4,5,6,7)

目的地:Id(4,7,6,9)

现在我正在查找控件中使用设置“重定向行到不匹配输出”。结果,在这个特定的情况下,我会得到1,2,3,5,这些行就是我要复制到目的地的。我也希望做的事情(以不同的步骤或同一步骤无关紧要)也是从目的地获得数字9并将其删除。原因是它不再存在于源代码中。我一直在尝试使用相同的查找控件;但是我无法让它工作。我是这个工具的新手,我可能没有在这个场景中使用正确的控件。所以如果有不同的方式来做到这一点,那也可以。

回答

0

您可以使用执行SQL任务中的SQL语句执行此操作。我已经添加下面的演示结果向你展示它是如何工作#温度是源标识和#TEMP2目的地ID /试着将下面的SQL:

select * from dbo.#temp 
select * from dbo.#temp2 

select b.one 
from #temp2 b left join #temp a 
on a.one = b.one 
where a.one is null 

Delete b from #temp2 b left join #temp a 
on a.one = b.one where a.one is null 

select * from #temp2 order by one 

enter image description here

0

你可以做到这一点通过做反向查找。

例如,对于插入你做到以下几点:

  1. OLE源表
  2. 查找(目标表)
  3. 查找无匹配输出
  4. OLE源目标

对于删除,请按照反向查找:

  1. OLE目标表
  2. 查找(源表)
  3. 查找无匹配输出
  4. OLE命令 - DELETE从id =?

enter image description here