【问题标题】:How to get 2 data sources to merge in SSIS?如何在 SSIS 中合并 2 个数据源?
【发布时间】:2010-05-26 12:53:09
【问题描述】:

我对 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 子句中的客户 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)

请指导我实现这一点。

【问题讨论】:

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


    【解决方案1】:

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

    声明@s varchar(max)

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

    选择@s

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

    从 dbo.LifeScience_Project 中选择 Customer_ID、Project_ID、Project_Name、Project_Manager_ID、Project_Manager_Name、DeliveryManager1_ID、DM1NAME WHERE (Customer_ID IN (?))

    【讨论】:

      【解决方案2】:

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

      选择 Customer_ID、Project_ID、Project_Name、Project_Manager_ID、Project_Manager_Name、DeliveryManager1_ID、DM1NAME
      FROM dbo.LifeScience_Project

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

      选择客户 ID
      来自 [Database2].Customer_Master

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

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

      我会这样做的。

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

      【讨论】:

      • 您好 Ajdams,感谢您的回复。我尝试了您的步骤,我认为我需要对以下几点进行详细说明:1)在查找转换编辑器中,常规选项卡“指定如何处理没有匹配条目的行”,我将其更改为“将行重定向到不匹配的输出”。它是否正确? 2)在“连接”选项卡中,我将查询设为“从 customer_master 中选择 customer_id”。它是否正确? 3)在列选项卡中,我做了哪些更改? 4)我需要在“高级”和“错误输出”选项卡中更改任何内容吗? 5)最后,当我加入所有内容时,它看起来像这个 OleDB 源 --> 查找列 --> 共享点列表目标
      • 离子。在将查找列附加到共享点列表目标时,它给出了一些提示?那里供应什么???我无法让它工作。等待您的回复。
      • @Sushant:有关您的其他信息,请参阅我的答案的编辑部分。
      • 高速公路亚当斯,仍然无法正常工作。这是我得到的日志 [Lookup [1423]] 信息:组件“Lookup”(1423)共缓存了 8 行。 [查找 [1423]] 信息:组件“查找”(1423) 处理了缓存中的 8 行。处理时间为 0.001 秒。缓存使用了 280 字节的内存。 [SharePoint 列表目标] 信息:在目标中找不到要更新的行。 [SSIS.Pipeline] 信息:后执行阶段开始。 [SSIS.Pipeline] 信息:“组件“SharePoint List Destination”(331)”写入 0 行。我错过了什么吗???
      • @Sushant:可能有一些问题,你确定找到匹配项吗?更改您的查找查询以仅提取 1 个您知道将匹配的特定 ID,并查看它是否被插入。这将是您可以尝试调试的第一件事
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-07
      • 2022-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      相关资源
      最近更新 更多