【问题标题】:How do I load data from files stored on multiple folders into the database using SSIS?如何使用 SSIS 将存储在多个文件夹中的文件中的数据加载到数据库中?
【发布时间】:2012-11-07 10:14:10
【问题描述】:

我有很多文件存储在单独的文件夹中,我想将它们提取并插入到 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 做到这一点吗?

【问题讨论】:

    标签: ssis


    【解决方案1】:

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

    这里有几个例子来说明 Foreach 文件循环枚举:

    How To – Tasks and Transformations: Foreach File Loop

    SSIS Package Containers- Part 5: Foreach Loop Containers

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      您可以尝试以下步骤:

      1. 您可以使用Foreach File EnumeratorTraverse subfolders 遍历文件的选项,请记住,您应该 使用Fully qualified 并将文件路径保存到用户中 名为 IncomingFile 的变量。
      2. 您可以创建名为SubFolderNameFileName 的变量。
      3. 将 IncomingFile 变量作为只读变量传递,并且 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 中,使用 子文件夹名。

      7. 编写存储过程,通过以下方式更新您的第 6 列表 比较子文件夹名称。

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

      您的包裹将如下所示。

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-24
        • 1970-01-01
        • 1970-01-01
        • 2021-03-14
        • 1970-01-01
        • 1970-01-01
        • 2017-11-04
        相关资源
        最近更新 更多