SSIS:如何在使用OLE DB目标之前从结果集中删除行?

时间:2009-10-27 10:03:30

标签: sql sql-server

我在使用SSIS时遇到问题。我尝试将数据库从数据库1导入数据库2。因此,我使用OLE DB源使用以下命令:

SELECT Name, Description, JobID
FROM   DBone.Table

我的问题是,我只想从这个来源导入新数据。所以我使用以下命令使用第二个OLE DB源:

SELECT JobID
FROM   DBtwo.Table

现在我想只导入数据库1中的数据,其中JobID不在数据库2中。所以我的想法是对两个数据源使用Merge Join,这样我的数据就像这样。

Name | Description    | DBone.JobID | DBtwo.JobID
-----------------------------------------------
'One'| 'Little test.' |      4      |     4    
'Two'| 'Little test.' |      6      |    NULL    

所以我有可能识别新数据,因为DBtwo.JobID列是NULL。

现在我的问题:我怎么说SSIS只将数据导入到DBtwo.JobID为NULL的数据库中,或者在导入之前删除这些数据?

3 个答案:

答案 0 :(得分:1)

另一种方法可能是首先运行Execute SQL Task从DBTwo获取最新的JobId,将结果存储在变量中,然后在SQL命令中使用DBone中的变量。

答案 1 :(得分:1)

我会使用条件分割。在要插入的路径中发送一组记录,并将另一组记录发送到回收站目的地(或者只是不定义另一个记录的位置)。

对于垃圾目的地,请看此链接: http://www.sqlis.com/post/Trash-Destination-Adapter.aspx

我觉得特别有用的是我可以设置一个数据查看器来查看我正在废弃的记录。为了维护目的,我还打算将这些记录丢弃,并且没有;只是忘记在分割的另一部分之后为记录设置另一条路径。

当你想要在实际将它们放入真实目的地之前进行测试时,垃圾目的地对于用作数据目的地也很有用。

答案 2 :(得分:0)

我想我可以自己回答我的问题,因为我找到了一种过滤数据的方法。

使用Merge Join Component合并两个表后,我添加了一个Script Component。在此组件中,我将输出的ExclusionGroup设置为0到1,并将以下代码添加到脚本中:

If Row.JobID_IsNull Then

   Row.DirectRowToOutput0()

End If

因此脚本组件会过滤数据。