0

我有一个带有Execute Process Task控制流选项卡的 SSIS 包。我notepad.exe在任务中调用以读取文本文件。我正在尝试替换\r\n为,\r\n\test以便将文本测试作为所有行的第一列的前缀。Thie 不会产生正确的结果。

文本文件数据:

Line 1{CR}{LF}
Line 2{CR}{LF}
Line 3

预期输出:

TestLine 1{CR}{LF}
TestLine 2{CR}{LF}
TestLine 3

我无法使用notepad.exe使用Execute Process Task来实现此输出。如何使用Execute Process Task实现此输出?SSIS 中是否还有其他任务可以做到这一点?

4

1 回答 1

2

执行流程任务:

执行流程任务不适合您尝试执行的任务。您可以Script Task读取文件内容并在行前加上您选择的文本,或者您可以使用Data Flow Task来通过配置实现相同的目的,而无需任何编码。

SSIS 2012 包说明了一个示例:

下面使用 SSIS 2012 创建的包说明了如何读取文本文件的内容,然后在每行前面加上一个文本短语,以将输出写入不同的平面文件。

假设您需要读取一个名为的文件,该文件Products.txt具有以下信息,每行以回车符和换行符结尾{CR}{LF}

源文件

创建一个名为SO_15213317.dtsx. 此示例使用 SQL Server Data Tools (SSDT) 2012 创建包,但此示例中的逻辑适用于较旧的 SSIS 版本 2005 至 2008 R2。

将 a 拖放Data Flow Task到“控制流”选项卡上。右键单击包底部的Connection ManagerNew Flat File Connection...选项卡,然后单击。此连接管理器将用于读取源文件。

SSIS 包

在平面文件连接管理器编辑器上,执行以下步骤:

  • 将名称设置为FILE_Products
  • 将描述设置为Read the products information from flat file.
  • 浏览到文件所在的位置并选择文件。
  • 其余属性将根据文件中的数据继承。
  • Column names in the first data row如果文件中有列标题,请选中该框
  • 点击Columns页面。

平面文件连接管理器编辑器 - 常规

将“列”选项卡保留为默认设置,然后单击Advanced“页面”。

平面文件连接管理器编辑器 - 列

高级页面会根据标题信息自动配置列名,SSIS 也会对数据类型做出很好的猜测。在这种情况下,它决定列数据类型是字符串。

平面文件连接管理器编辑器 - 高级

单击“预览”选项卡以简单地查看文件数据。单击确定关闭平面文件连接管理器编辑器。

平面文件连接管理器编辑器 - 预览

双击控制流选项卡上的数据流任务以切换到数据流选项卡。在 Data Flow Task 上,拖放 aFlat File Source以读取源文件。如下所示配置平面文件源。

平面文件源编辑器 - 连接管理器

列将自动配置。单击确定关闭平面文件源编辑器。

平面文件源编辑器 - 列

要在所有行上为文本添加前缀Test,您需要使用Derived Column Transformation. 在平面文件源之后拖放一个派生列转换。平面文件源连接到派生列转换。您可以添加新列或替换现有列。该示例使用以下表达式添加一个新列。此表达式将文本 Test 作为列的传入值的前缀ProductName,然后将它们类型转换为长度为 54 个字符的 SSIS 数据类型 DT_WSTR。

(DT_WSTR,54)("Test" + ProductName)

派生列转换

拖放 aFlat File Destination以将输出写入另一个文本文件。在Flat File Destination Editor上,单击New...按钮为目标文件创建一个新的 Flat File Connection Manager。

平面文件目标编辑器 - 连接管理器

DelimitedFlat File Format对话框中选择并单击确定。

平面文件格式

在平面文件连接管理器编辑器上,执行以下步骤:

  • 将名称设置为FILE_NewProducts
  • 将描述设置为Write the data to the new product flat file..
  • 浏览到应保存文件的位置并为文件命名。
  • 根据要求配置其余属性。
  • Column names in the first data row如果您需要将列标题写入文件,请选中该框
  • 点击Columns页面。

平面文件连接管理器 - 常规

使用行和列分隔符配置列页面。

平面文件连接管理器 - 列

在“高级”页面,单击列ProductName列,然后单击Delete。您可以随意命名该列。

平面文件连接管理器 - 高级

只有该列NewProductName将保留在目标连接管理器上。单击确定。

平面文件连接管理器 - 高级

Flat File Destination Editor上,确保选择正确的平面文件连接管理器。

文件文件目标编辑器 - 连接管理器

单击“映射”页面以配置列映射以写入数据。

文件文件目标编辑器 - 列

配置数据流任务后,包应如下所示。

数据流任务

执行包读取源文件并生成带有文本前缀的新输出文件。

包执行

新生成的文件NewProducts.txt将包含前缀文本短语Test

输出文件

其他选项:

有多种不同的方式来读取文件,您也可以使用Script Task. 但是,此处的示例说明了读取 SSIS 包中的文本文件的适当方法。这应该让您了解如何设计处理平面文件或分隔文件的 SSIS 包。

于 2013-03-05T01:14:24.743 回答