【发布时间】:2012-05-04 14:26:12
【问题描述】:
有人有关于如何使用 SSIS 包将固定宽度的平面文件导入数据库的教程吗?
我有一个包含不同长度列的平面文件。
Column name Width
----------- -----
First name 25
Last name 25
Id 9
Date 8
如何将平面文件转换为列?
【问题讨论】:
有人有关于如何使用 SSIS 包将固定宽度的平面文件导入数据库的教程吗?
我有一个包含不同长度列的平面文件。
Column name Width
----------- -----
First name 25
Last name 25
Id 9
Date 8
如何将平面文件转换为列?
【问题讨论】:
这是一个使用 SSIS 2008 R2 创建的示例包,它解释了如何将平面文件导入到数据库表中。
Fixed_Width_File.txt 的固定宽度平面文件。屏幕截图使用 Notepad++ 显示文件内容。它具有显示回车和换行等特殊字符的能力。 CR LF 表示行分隔符回车和换行。在 SQL 服务器数据库中,使用 SQL 脚本 部分下提供的创建脚本创建一个名为 dbo.FlatFile 的表。
创建一个新的 SSIS 包并添加一个新的 OLE DB 连接管理器,该管理器将连接到 SQL Server 数据库。假设 OLE DB 连接管理器被命名为 SQLServer。
双击数据流任务,您将被带到数据流选项卡。在数据流选项卡上,放置一个平面文件源。双击平面文件源,平面文件源编辑器将出现。单击新建按钮打开平面文件连接管理器编辑器。
在 Flat File Source Editor 的 General 部分,在 Connection manager name 中输入一个值(比如 Source)并浏览到平面文件位置并选择文件。此示例使用路径 C:\temp\Fixed_Width_File.txt 中的示例文件如果文件中有标题行,则可以在跳过标题行的标题行文本框中输入值 1 以跳过标题行。
69。该值是所有列的宽度之和 + 2 的行分隔符。设置正确的行宽后,您应该可以在源数据列部分正确地看到固定宽度的文件数据。现在,您必须单击适当的位置来确定列限制。请注意第 4、5、6 部分和下面的屏幕截图。FirstName、LastName、Id、Date 和RowDelimiter
Id 列更改为数据类型four-byte signed integer [DT_I4] 并将日期列更改为数据类型date [DT_DATE]
RowDelimiter,因为我们不需要它。OLE DB Destination。将平面文件源的输出连接到 OLE DB 目标。SQLServer 的 OLE DB 连接管理器,并将 表或视图的名称下拉设置为 [dbo].[FlatFile]
这个示例应该让您了解如何将固定宽度的平面文件导入数据库。它没有解释如何处理错误日志,但这应该可以帮助您入门并帮助您在使用包时发现其他与 SSIS 相关的功能。
希望对您有所帮助。
SQL Scripts:
CREATE TABLE [dbo].[FlatFile](
[Id] [int] NOT NULL,
[FirstName] [varchar](25) NOT NULL,
[LastName] [varchar](25) NOT NULL,
[Date] [datetime] NOT NULL
)
【讨论】:
在派生列转换中,您可以对每个列使用 SUBSTRING() 函数。 示例:
列派生列
FirstName SUBSTRING(Data, startFrom, Length);
这里 FirstName 的宽度为 25,因此如果我们从第 0 个位置开始考虑,那么在派生列中,您应该通过给出 SUBSTRING(Data, 0, 25); 来指定它;
其他列也是如此。
【讨论】:
很好解释,湿婆!您的教程和出色的插图指出了微软应该明确的内容
如果没有这两件事,尝试运行导入将给出以下错误消息: “列 x”列的数据转换返回状态值 4 和状态文本“文本被截断或目标代码页中的一个或多个字符不匹配。”。
我已在此错误文本中添加,希望有人在搜索错误原因时会找到此页面。即使事后,您的教程也值得寻找!
【讨论】: