将多个平面文件导入多个SQL表

时间:2017-12-12 18:02:26

标签: sql-server ssis etl flatfilesource oledbdestination

这是我的文件夹设置。

Folder Structure

这是文件设置

File Structure

想法是遍历文件夹&将FileA内容放到数据库上的Table FileA.dbo(也是FileB,FileC等)。 FileName结构在所有文件夹中都是相同的。

我有这个ssis包,我用foreachloop解析文件夹 - >数据流。

ssis1 ssis2

我已经检查过我为了获取文件名而制定的算法

REVERSE(Substring(Reverse( @[User::FileName] ),5,LEN( @[User::FileName] ))) == "FileA"

它解析了.txt扩展名。下面是我所拥有的foreach循环的设置。 Foreach

要启动整个软件包,我在文件夹中放了.txt文件。我制作了foreach容器循环子文件夹。

startingpoint

因为,我不是SSIS软件包开发人员,这是我能用一些研究做的最好的。我遇到的问题是,似乎部分工作。

快照是我所拥有的场景的模型,实际上我有200多个文件夹,每个文件夹有50个文本文件,每个文件被指定将内容转储到各自的命名表格。

但是我在包成功执行后看到的总行数非常低&不可能是正确的。无论如何都要获得它遍历的文件夹数量的计数/列表。我也做错了什么?

理想情况下,我只是不想从.txt文件开始,只需将整个内容放到文件夹中,获取文件名(我认为我的工作代码为)&只需将所有信息转储到OLEDB目的地。

任何帮助,资源链接都非常感谢。

1 个答案:

答案 0 :(得分:2)

解决方案概述

您可以使用foreach循环中的一个DataFlow任务来实现此目的,但诀窍是您必须从变量中读取源平面文件名和目标SQL表名

注意:平面文件结构必须相同且SQL表必须具有相同的结构

详细解决方案

  1. 右键单击Control Flow窗口,然后点击Variables
  2. enter image description here

    1. 声明2个SSIS变量:

      • FlatFilename:类型为String,并为默认值指定随机文件路径(即C:\MockFolder\FileA.txt
      • ' SQLTablename : of type String`并分配给以下表达式:
    2. 这假设所有目标表都具有相同的架构dbo

       "[dbo].[" + REPLACE(RIGHT( @[User::FlatFilename] , FINDSTRING(REVERSE( @[User::FlatFilename]  ) , "\\", 1) - 1),".txt","") + "]"
      

      enter image description here

      enter image description here

      1. 在其中添加Foreach Loop ContainerDataFlow Task,点击DataFlow Task,然后在属性标签上,将Delay Validation属性设置为True
      2. enter image description here

        1. 双击Foreach Loop container并选择主目录,文件过滤器*.txt也选择fully qualified检索文件名选项
        2. enter image description here

          1. 转到变量映射标签,然后选择@[User::FlatFilename]变量
          2. enter image description here

            1. 添加2个连接管理器

              • FlatFileConnection:平面文件连接管理器,通过随机选择File (即C:\MockFolder\FileA.txt
              • 进行配置
              • OLEDBConnection:OLEDB连接管理器,并将其配置为目标SQL Server数据库
            2. DataFlow Task中,在Flat File Source选择OLEDB Destination选项中添加OLEDB DestinationTable name from variable,然后选择@[User::SQLTablename]作为变量名称

            3. enter image description here

              1. 在源和目的地之间映射列

              2. 点击连接管理器窗口中的FlatFileConnection,按F4以显示属性标签,点击表达式

              3. enter image description here

                1. 选择Connection String属性为其指定以下表达式:

                  @[user::FlatFilename]
                  
                2. enter image description here