这是我的文件夹设置。
这是文件设置
想法是遍历文件夹&将FileA内容放到数据库上的Table FileA.dbo(也是FileB,FileC等)。 FileName结构在所有文件夹中都是相同的。
我有这个ssis包,我用foreachloop解析文件夹 - >数据流。
我已经检查过我为了获取文件名而制定的算法
REVERSE(Substring(Reverse( @[User::FileName] ),5,LEN( @[User::FileName] ))) == "FileA"
它解析了.txt扩展名。下面是我所拥有的foreach循环的设置。
要启动整个软件包,我在文件夹中放了.txt文件。我制作了foreach容器循环子文件夹。
因为,我不是SSIS软件包开发人员,这是我能用一些研究做的最好的。我遇到的问题是,似乎部分工作。
快照是我所拥有的场景的模型,实际上我有200多个文件夹,每个文件夹有50个文本文件,每个文件被指定将内容转储到各自的命名表格。
但是我在包成功执行后看到的总行数非常低&不可能是正确的。无论如何都要获得它遍历的文件夹数量的计数/列表。我也做错了什么?
理想情况下,我只是不想从.txt文件开始,只需将整个内容放到文件夹中,获取文件名(我认为我的工作代码为)&只需将所有信息转储到OLEDB目的地。
任何帮助,资源链接都非常感谢。
答案 0 :(得分:2)
您可以使用foreach循环中的一个DataFlow任务来实现此目的,但诀窍是您必须从变量中读取源平面文件名和目标SQL表名
注意:平面文件结构必须相同且SQL表必须具有相同的结构
Control Flow
窗口,然后点击Variables
声明2个SSIS变量:
FlatFilename
:类型为String
,并为默认值指定随机文件路径(即C:\MockFolder\FileA.txt
) : of type
String`并分配给以下表达式: 这假设所有目标表都具有相同的架构dbo
"[dbo].[" + REPLACE(RIGHT( @[User::FlatFilename] , FINDSTRING(REVERSE( @[User::FlatFilename] ) , "\\", 1) - 1),".txt","") + "]"
Foreach Loop Container
和DataFlow Task
,点击DataFlow Task
,然后在属性标签上,将Delay Validation
属性设置为True
Foreach Loop container
并选择主目录,文件过滤器*.txt
也选择fully qualified
检索文件名选项@[User::FlatFilename]
变量添加2个连接管理器
File
(即C:\MockFolder\FileA.txt
) 在DataFlow Task
中,在Flat File Source
选择OLEDB Destination
选项中添加OLEDB Destination
和Table name from variable
,然后选择@[User::SQLTablename]
作为变量名称