繁体   English   中英

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

[英]How to delete rows based on comparison from Data Flow Task in an 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]。 我不确定如何进行条件检查。 任何帮助表示赞赏。

查找很好(仅在不匹配的情况下仅定向行),但有时最好将数据暂存到表中,然后在目标服务器上的SQL任务中进行处理,就像执行SQL语句一样。

如果使用查找,则必须当心-它会根据查找任务中的设置缓存整个集(您将看到该包花费很长时间进行初始化),并且SSIS区分大小写,而SQL服务器将取决于排序规则设置。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM