我在控制流选项卡上有一个带有 Execute Process Task
的SSIS包。我在任务中调用 notepad.exe
来读取文本文件。我正在尝试将 \r\n
替换为 \r\n\test
,以便在所有行的第一列上添加文本测试作为前缀。你没有得到正确的结果。
Line 1{CR}{LF}
Line 2{CR}{LF}
Line 3
TestLine 1{CR}{LF}
TestLine 2{CR}{LF}
TestLine 3
我无法使用执行流程任务使用 notepad.exe 实现此输出。如何使用执行流程任务实现此输出? SSIS中是否还有其他任务可以做到这一点?
答案 0 :(得分:2)
执行流程任务不适合您要执行的操作。您可以Script Task
读取文件内容并在行前面添加您选择的文本,或者您可以使用 Data Flow Task
来实现相同的配置,而无需任何编码。< / p>
使用SSIS 2012创建的包下面说明了如何读取文本文件的内容,然后在每行前面加上一个文本短语,将输出写入另一个平面文件。
假设您需要读取名为 Products.txt
的文件,该文件包含以下信息,每行以回车符和换行符结尾 {{ 1}}
创建名为 {CR}{LF}
的SSIS包。此示例使用SQL Server数据工具(SSDT)2012创建程序包,但此示例中的逻辑适用于旧版SSIS版本2005到2008 R2。
将 SO_15213317.dtsx
拖放到控制流标签上。右键单击软件包底部的 Connection Manager 选项卡,然后单击 Data Flow Task
。此连接管理器将用于读取源文件。
在“平面文件连接管理器编辑器”上,执行以下步骤:
New Flat File Connection...
FILE_Products
Read the products information from flat file.
框Column names in the first data row
页面。
将列标签保留为默认设置,然后点击 Columns
页面。
高级页面将根据标题信息自动配置列名称,SSIS也会对数据类型进行很好的猜测。在这种情况下,它确定列数据类型是字符串。
单击预览选项卡以查看文件数据。单击“确定”关闭“平面文件连接管理器编辑器”。
双击“控制流”选项卡上的数据流任务,切换到数据流选项卡。在数据流任务上,拖放 Advanced
以读取源文件。配置平面文件源,如下所示。
列将自动配置。单击“确定”关闭“平面文件源编辑器”。
要在所有行上添加 Flat File Source
前缀,您需要使用 Test
。在平面文件源之后拖放派生列转换。将平面文件源连接到派生列转换。您可以添加新列或替换现有列。该示例使用以下表达式添加新列。此表达式将文本Test作为列 Derived Column Transformation
的传入值的前缀,然后键入将它们转换为长度为54个字符的SSIS数据类型DT_WSTR。
ProductName
拖放 (DT_WSTR,54)("Test" + ProductName)
,将输出写入另一个文本文件。在平面文件目标编辑器上,单击 Flat File Destination
按钮为目标文件创建新的平面文件连接管理器。
在 New...
对话框中选择 Delimited
,然后点击确定。
在“平面文件连接管理器编辑器”上,执行以下步骤:
Flat File Format
FILE_NewProducts
Write the data to the new product flat file..
框Column names in the first data row
页面。
使用行和列分隔符配置“列”页面。
在高级页面上,点击 Columns
列,然后点击 ProductName
。您可以根据需要为列命名。
只有列 Delete
将保留在目标连接管理器上。单击确定。
在平面文件目标编辑器上,确保选择正确的平面文件连接管理器。
单击 Mappings 页面以配置列映射以写入数据。
配置数据流任务后,程序包应如下所示。
执行包以读取源文件并生成带有文本前缀的新输出文件。
新生成的文件NewProductName
将包含前缀文字短语 NewProducts.txt
有多种不同的方法可以读取文件,您也可以使用 Test
读取文件。但是,此处的示例说明了在SSIS包中读取文本文件的适当方法。这可以让您了解如何设计处理平面文件或分隔文件的SSIS包。