如何根据SSIS中的数据流任务进行比较来删除行?

时间:2010-05-28 19:07:07

标签: sql ssis

我有一个带有两个OLE DB Source对象的DataFlow任务。这是我想用SSIS实现的SQL:

Insert into server2.db.dbo.[table2] (...)
Select col1, col2, col3 ...
from Server1.db.dbo.[table1] where [table1.col1] not in 
(Select col5 from server2.db.dbo.[table2] Where ...)

我是SSIS的新手,不知道如何实现这一目标。我以为我可以使用数据流任务并使用server1.db.dbo.table1中的数据填充第一个源,使用server2.db.dbo填充第二个源。[table2]然后在插入之前执行条件检查到server2.db.dbo。[table2]。我不知道怎么做条件检查。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

虽然查找很好(仅在不匹配的情况下引导行),但有时最好将数据转换为表,然后在目标服务器上的SQL任务中执行,就像SQL语句一样。

如果您使用查找,则必须注意 - 它将根据查找任务中的设置缓存整个集合(您将看到该程序包需要很长时间才能初始化),并且SSIS区分大小写,而SQL Server将依赖于整理设置。

答案 1 :(得分:0)

执行此操作的最简单方法是使用sql select col1, col2, col3 ... from db.dbo.[table1]保留server1中的oledb源对象。然后在数据流中接下来,从server2向sql select col5 from db.dbo.[table2] where ...发出查找。在查找(对话框左下角的按钮)上设置错误条件,以在不匹配时重定向行。通过从左侧的col1拖动到右侧的col5,设置匹配条件(对话框顶部的选项卡)以匹配col1和col5(如果您已执行此操作,则它们之间应出现箭头)。完成后,放置OleDb目标对象并将查找中的错误输出拖动到此对象的输入。选择server2.db.dbo。[table2]作为目标表并正确映射行。