我是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)
请指导我实施此操作。
答案 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)点中提到的那样。