【问题标题】:How to delete rows based on comparison from Data Flow Task in an SSIS?如何根据 SSIS 中数据流任务的比较删除行?
【发布时间】:2010-05-30 01:05:31
【问题描述】:

我有一个包含两个 OLE DB 源对象的 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 ssis


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        • 2020-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多