经过大量的试验,终于得到了想要的结果。最后,它看起来如此简单。
我创建这个包的主要动机是我有很多 .csv 文件,这些文件需要打开每个文件并运行一个消除几列的宏,并以所需的格式重新排列剩余的列。然后我必须在单击 Excel 确认框后手动保存每个文件。那变得太过分了。我只想要一键式的方法。
详细说明我所做的事情。希望它可以帮助那些想要从多个 .csv 文件中获取数据作为源的人,然后按照他们需要的顺序只获取所需的列,最后将所需的输出作为 .csv 文件保存到新的目的地。
简而言之,我只需要使用:
在数据流任务中:
- 平面文件源
- 平面文件目标
- 2 个平面文件连接管理器 -源和目标各一个。
此外,必须使用 3 个变量- 所有带有项目范围的字符串数据类型 - 我将其命名为:CurrFileName、DestFilePath和FolderPath。
.
详细步骤:
为变量设置默认值:
CurrFileName:只需提供 .scv 文件 (test.csv) 之一的名称以供临时使用。
FolderPath:提供源 .csv 文件所在的路径(C:\SSIS\Data\Input)
DestFilePath:提供要保存已处理文件的目标路径(C:\SSIS\Data\Input\Output)
第 1 步:将 For Each 循环容器拖到控制流区域。
第 2 步:在集合中,选择枚举器为“Foreach 文件枚举器”。
第 3 步:在 Enumerator Configuration 下,在 Folder: 下提供 .csv 文件所在的文件夹路径(在我的例子中是C:\SSIS\Data\Input),在 Files: 中提供扩展名(在我们的例子中:*. csv)
第 4 步:在检索文件名下,选择“名称和扩展名”单选按钮。
第 5 步:然后转到变量映射部分并选择变量(在我的例子中:User::CurrFileName。
第 6 步:创建源连接(我们称之为SrcConnection)- 在 Connection Managers 区域中右键单击并选择 Flat File Connection 管理器并选择其中一个 .csv 文件(用于临时目的)。转到“高级”选项卡并为您希望保留的列提供正确的所需数据类型。单击确定退出。
第 7 步:然后转到这个新创建的源平面文件连接的属性并单击与表达式字段相邻的小框以打开属性表达式编辑器。在 'Property' 下,选择 'ConnectionString' 并在 Expression 空间中输入:@[User::FolderPath] + "\" + @[User::CurrFileName]并单击 OK 退出。
第 8 步:在 Windows 资源管理器中,在 Source 文件夹中创建一个新文件夹(在我们的例子中:C:\SSIS\Data\Input\Output)
第 9 步:创建目标连接(我们称之为DestConnection) - 在 Connection Managers 区域中右键单击并选择 Flat File Connection 管理器并选择其中一个 .csv 文件(用于临时目的)。转到“高级”选项卡并为您希望保留的列提供正确的所需数据类型。单击确定退出。
第 10 步:然后转到这个新创建的源平面文件连接的属性并单击与表达式字段相邻的小框以打开属性表达式编辑器。在 'Property' 下,选择 'ConnectionString' 并在 Expression 空间中输入:@[User::DestFilePath] + @[User::CurrFileName]并单击 OK 退出。
第 11 步:将数据流任务拖到 Foreach 循环容器中。
第 12 步:在数据流任务中,拖动平面文件源并在平面文件连接管理器中:选择源连接(在本例中:SrcConnection)。在列中,取消选择所有列并仅选择您需要的列(按您需要的顺序),然后单击确定退出。
第 13 步:将平面文件目标拖到数据流任务并在平面文件连接管理器中:选择目标连接(在本例中:DestConnection)。然后,转到映射部分并验证映射是否符合所需的输出。单击确定退出。
第14步:就是这样。执行包。它应该毫无问题地执行。
希望这有帮助:-)