如何在SSIS中合并2个数据源?

时间:2010-05-26 12:53:09

标签: sql-server sql-server-2005 ssis

我是SSIS的新手。我遇到了一种必须使用数据流任务的情况。数据源是MS-SQL server 2008,目标是Sharepoint列表。我将数据源对象的SQl查询作为

SELECT     Customer_ID, Project_ID, Project_Name, Project_Manager_ID, Project_Manager_Name, DeliveryManager1_ID, DM1NAME FROM dbo.LifeScience_Project
WHERE (Customer_ID IN ('1200532', '1200632', '1207916', '1212121', '1217793', '1219351', '1219417', '1219776'))

现在,这就是问题所在。 where子句中的customer id需要来自不同的数据源。这会使它看起来像

SELECT     Customer_ID, Project_ID, Project_Name, Project_Manager_ID, Project_Manager_Name, DeliveryManager1_ID, DM1NAME FROM dbo.LifeScience_Project
WHERE Customer_ID IN (select customer_id from [Database2].Customer_Master)

请指导我实施此操作。

2 个答案:

答案 0 :(得分:1)

我会在执行sql任务中运行一个查询,在该任务中构建客户ID列表并将结果存储在变量中: -

声明@s varchar(max)

设置@s ='' SELECT @s = @s +''''+ Cast(customer_id as varchar(20))+''',' FROM(从[Database2] .Customer_Master中选择customer_id)为T

选择@s

然后在您的数据流任务中,将使用第一部分中的变量对源查询进行参数化。

SELECT Customer_ID,Project_ID,Project_Name,Project_Manager_ID,Project_Manager_Name,DeliveryManager1_ID,DM1NAME FROM dbo.LifeScience_Project WHERE(Customer_ID IN(?))

答案 1 :(得分:0)

您必须在数据流任务中使用查找组件。例如,通过从数据访问模式中选择SQL命令,只需拉动所有内容,即在OLEDB组件中编写第一个查询,即

SELECT Customer_ID,Project_ID,Project_Name,Project_Manager_ID,Project_Manager_Name,DeliveryManager1_ID,DM1NAME
来自dbo.LifeScience_Project

然后将此源连接到Lookup组件并在Lookup组件中,而不是选择查找表,选择SQL选项并在其中键入第二个查询:

选择customer_id
来自[Database2] .Customer_Master

现在执行与两个Customer_ID字段匹配的查找,并仅在成功匹配时直接输出。如果您有特定的ID,可以将其添加到第二个查询中,如下所示:

选择customer_id
来自[Database2] .Customer_Master
customer_id IN('someid','someid2',...)

我就是这样做的。

修改
回应Sushant的其他问题需要澄清 (1)你想在指导你的行时不要使用MATCH输出 (2)是的,这是正确的,请确保您的数据源指向另一个数据库(非SQL2008)。
(3)在列Tab中,您只需将Customer_ID与Customer_ID匹配;
(4)在“高级”选项卡中,您无需执行任何操作。在“错误”选项卡中,您可以选择忽略错误,因为您不关心不匹配 (5)是的,这是正确的流程 - 连接到Sharepoint时的提示是询问您是否要从Lookup或UNMATCHED输出重定向MATCHED输出。您想要选择MATCHED输出,如我在第(1)点中提到的那样。