首页 > 解决方案 > 如何创建单独的转换文件而不是覆盖 ssis 输出平面文件?

问题描述

我有一个数据流,用于使用每个循环容器对给定文件夹中的多个平面文件进行转换。我再次有一个平面文件作为输出文件。问题是每次我执行作业时,只有最后一个转换的文件将存储在目标文件中。在 SSIS 中有没有一种方法可以创建单独的转换输出文件,而不是一遍又一遍地覆盖同一个输出文件?

为了。例如。我在一个文件夹中有 5 个平面文件 test_1.txt、test_2.txt、test_3.txt、test4_.txt 和 test_5.txt。作业运行后,我只能看到最后一个文件 test_5.txt 中的数据正在我的目标文件中进行转换。

标签: sql-serverssisetlflat-fileflatfiledestination

解决方案


这是我测试的一个工作示例的步骤。

变量

我定义了 3 个变量:

在此处输入图像描述

  • FileName - 在 foreach 循环中使用
  • DestinationDir - 文件在哪里
  • SourceDir - 我要处理的文件在哪里

Foreach 循环设置

我有一个 foreach 循环配置为: 在此处输入图像描述

  • “目录”的表达式设置为 @[User::SourceDir]
  • 检索文件名设置为“名称和扩展名”

然后在“变量映射”下: 在此处输入图像描述

这意味着当 foreach 循环遍历目录中的文件时,它会将文件的“名称和扩展名”设置为变量 @[User:FileName]

数据流任务

我在 foreach 循环中添加了一个数据流任务: 在此处输入图像描述

然后在 DFT 内部,我有一个简单的平面文件源到平面文件目标。我们只需将每个文件的内容传递给新文件:

在此处输入图像描述

在初始开发期间,我将手动选择一个文件来逐步设置每个源和目标。然后回来更改连接管理器并在 ConnectionString 上设置一个表达式。

连接管理器表达式

源文件连接管理器: 在此处输入图像描述

  • ConnectionString 得到一个表达式:@[User::SourceDir] + @[User::FileName]

目标文件连接管理器: 在此处输入图像描述

  • ConnectionString 得到一个表达式:@[User::DestinationDir] + @[User::FileName]

测试

我的源目录中有 2 个测试文件,而目标中没有文件: 在此处输入图像描述

在我执行我的包后,我获得了成功,并在我的目的地获得了新文件: 在此处输入图像描述 在此处输入图像描述


推荐阅读