如何使用SSIS将存储在多个文件夹中的文件中的数据加载到数据库中?

时间:2012-11-07 10:14:11

标签: ssis

我有很多文件存储在单独的文件夹中,我想要提取并插入到SQL Server数据库中的单个表中。文件夹设置如下所示:

Folder 1  
 |--> SubFolder 1.1  
 |     |--> File 1  
 |     |--> File 2  
 |--> SubFolder 1.2  
 |     |--> File 1  
 |     |--> File 2
 |--> SubFolder 1.3  
       |--> File 1  
       |--> File 2

大约有100个子文件夹,所有这些文件夹中都有两个 .txt 文件,我需要提取这些文件。

我需要将数据加载到如下所示的表格中

Column1         Column2     Column3     Column4     Column5     Column6  
-------------   ---------   ---------   ---------   ---------   ---------
SubFolderName   File1Col1   File1Col2   File1Col3   File1Col4   File2Col1

有人知道如何使用SSIS做到这一点吗?

2 个答案:

答案 0 :(得分:3)

您应该使用Traverse subfoldersForeach File Enumerator选项下的Foreach Loop container选项。 控制流任务中提供了 Foreach循环容器

以下是一些说明Foreach文件循环枚举的示例:

How To – Tasks and Transformations: Foreach File Loop

SSIS Package Containers- Part 5: Foreach Loop Containers

我希望这会有所帮助。

答案 1 :(得分:2)

您可以尝试以下步骤:

  1. 您可以使用Foreach File EnumeratorTraverse subfolders 迭代文件的选项,请记住你应该这样做 使用Fully qualified并将文件路径保存到用户 变量名为IncomingFile
  2. 您可以创建名为SubFolderNameFileName的变量。
  3. 将IncomingFile变量作为readonly变量传递 subfolderName和FileName为ReadWriteVariable。你可以使用 用于获取子文件名的脚本组件。

    var incomingFile = Dts.Variables["IncomingFile"].Value.ToString();
    
    FileInfo fileInfo = new FileInfo(fileFullPath);
    
    string subFolderPath = fileInfo.Directory.Name;
    string fileName = fileInfo.Name;
    
    Dts.Variables["SubFolderName"].Value = subFolderPath;
    Dts.Variables["FileName"].Value = fileName;
    
  4. 拖动连接到ScriptComponet的两个数据流。你应该 写下优先约束如下[对于两个评估 操作应该是“表达”]。

        For DataFlow 1 -> `@FileName=="Text 1"`
        For DataFlow 2 -> `@FileName=="Text 2"`
    
  5. 在您的数据流中1使用派生列并使用SubFolderName 变量以映射到示例中的“Column1”。其他专栏将是 从您的txt文件映射,而不是“Column6”。

  6. 在您的数据流2中,将数据转储到SQL服务器中 subfoldername。

  7. 编写用于更新Coloumn 6表的存储过程 比较子文件夹名称。

  8. 使用SQL Execute task运行存储过程。

  9. 您的包装看起来如下。

    enter image description here

    希望这有帮助!