我有很多文件存储在单独的文件夹中,我想要提取并插入到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做到这一点吗?
答案 0 :(得分:3)
您应该使用Traverse subfolders
中Foreach 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)
您可以尝试以下步骤:
Foreach File Enumerator
和Traverse subfolders
迭代文件的选项,请记住你应该这样做
使用Fully qualified
并将文件路径保存到用户
变量名为IncomingFile
。SubFolderName
和FileName
的变量。将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;
拖动连接到ScriptComponet的两个数据流。你应该 写下优先约束如下[对于两个评估 操作应该是“表达”]。
For DataFlow 1 -> `@FileName=="Text 1"`
For DataFlow 2 -> `@FileName=="Text 2"`
在您的数据流中1使用派生列并使用SubFolderName 变量以映射到示例中的“Column1”。其他专栏将是 从您的txt文件映射,而不是“Column6”。
在您的数据流2中,将数据转储到SQL服务器中 subfoldername。
编写用于更新Coloumn 6表的存储过程 比较子文件夹名称。
使用SQL Execute task
运行存储过程。
您的包装看起来如下。
希望这有帮助!