我一直在研究这个问题,但没有发现任何明确的内容。我有多个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中,这似乎是一项合理的承诺吗?是否有人能够帮助我或者指出我尚未发现的来源?
非常感谢任何帮助 - 如果您想了解更多详情,请与我们联系。
由于
答案 0 :(得分: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.