SSIS在另一个中存在Id时从一个集合中删除结果

时间:2016-12-02 14:00:45

标签: ssis sql-server-2008-r2

我正在使用SQLserver 2008r2 SSIS

我有来自两个不同数据库的两个数据源,在数据流任务中,我希望能够从源1中删除存在源2中的ID并从源1输出剩余数据的行

我发现很难找到相关的数据流转换任务。

如果数据在同一个数据库中,则在SQL中它只是

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableB.id IS null

2 个答案:

答案 0 :(得分:0)

我将使用数据流任务将所有记录从源数据库提取到目标数据库中的临时表。然后使用问题中的语句来获取我需要的数据。

根据要提取/排除的数据量,您也可以采用相反的方式。将id从目标发送到源中的临时表,然后查询行以类似的方式提取。

如果无法在源或目标中创建登台表,则应该能够在SSIS转换中完成所有操作。可能是查找或注释合并连接/条件拆分。我认为使用临时表方法可以提高性能。

答案 1 :(得分:0)

如果您的数据库位于同一服务器上,则可以使用相同的语法添加数据库名称:

SELECT * FROM Database1.TableA AS T1
LEFT OUTER JOIN Database2.TableB AS T2
ON T1.name = T2.name
WHERE T1.id IS null

如果您的数据库位于不同的服务器上,那么您应该按照以下步骤操作:

  • 在数据流任务中,您必须为OLEDB source

  • 创建TableA
  • 添加查找转换控件

  • 选择TableB作为查找对象的来源

  • ID

  • TableAID TableBTableB
  • SELECT * FROM Database1.TableA AS T1 LEFT OUTER JOIN Server2.Database2.TableB AS T2 ON T1.name = T2.name WHERE T1.id IS null 选择任何列作为输出

  • 配置查找对象错误输出以忽略失败(如果没有找到连接值,则返回Null)

  • 添加一个条件拆分,用于从查找对象中标记为输出的列中筛选Null值

  • 将此输出链接到您的目的地

您可以在sql server中创建链接服务器,并使用如下所示的查询

{{1}}

详细了解创建Linked Server