SSIS:根据Excel文件名将多个格式相同但文件名不同的Excel文件插入到多个数据库表目标

问题描述 投票:0回答:2

我已经研究了一段时间,但没有发现任何明确的内容。 我有多个 Excel 文件,其中包含不同项目的账单信息。 我们可以将它们视为项目 A 的文件 A、项目 B 的文件 B 和项目 C 的文件 C。按照规则,它们从 Outlook 移动到公共文件夹。

我想使用 SSIS 来利用文件名来确定目标位置。在上面非常简化的情况下,我希望循环遍历该文件夹,并将文件 A 读取到表 A,将文件 B 读取到表 B,将文件 C 读取到表 C。所有表都包含在一个 SQL Server 数据库中。完成后,我希望将文件移动到设定的目的地(文件夹 A、文件夹 B 和文件夹 C)

我假设您必须添加一个脚本组件来获取文件名变量,解析它以恢复 A、B、C,并使用它来指示某种 IF 语句来定位相关的目标位置。

唯一的其他小复杂之处是我想检查每个表以确保我没有添加任何重复的数据 - 假设我会在每个表目标之前使用查找组件...

我可以找到有关每个循环容器和动态设置源位置的信息,但不能找到基于文件名的动态目标。

这在 SSIS 中看起来是一项合理的任务吗?有人能够在这方面帮助我,或者向我指出我尚未发现的来源吗?

任何帮助将不胜感激 - 如果您想了解更多详细信息,也请告诉我。

谢谢

sql-server excel ssis
2个回答
1
投票

正如评论中所读,只要它们共享不同的表结构,我们就无法在 for-each 循环中加载到多个表中。

如果所有 Excel 工作表共享相同的结构,我们可以避免复杂性。以下步骤可能对您有帮助。

1. DFT 1
a.  Develop an SSIS package with a DFT to load all your excel files into a single stage table.
b.  In the table in addition to the excel columns, add a separate column to store file name.
c.  Use a for-each loop with 'Foreach ADO.NET Schema Rowset Enumerator'.
d.  Again it will be help you if excel files share a common file name pattern.(ProjA_140527.xls, ProjA_140528.xls,ProjB_140527.xls etc), 
    so that you can use Proj*.xls to fetch the excel files.

2. DFT 2
a.  After this DFT, add another DFT. use an OLE DB Source taking data from stage table.
b.  After the source, add a conditional split. Write expressions based on excel file name column.
c.  if you have 5 projects, conditional split will have 5 outputs and 1 non-matching output.
d.  Map each project tables to conditional split outputs.

0
投票
  1. 修改 Load_Prospects_Staging.dtsx 以包含以下内容
  • 加载 Prospect_B.xls 文件之前截断 tbl_stg_Prospects 表。
  • 添加加载多个 Excel 文件的功能
© www.soinside.com 2019 - 2024. All rights reserved.