有没有人有关于如何使用 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
的名称下拉设置为[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(数据, startFrom, 长度);
这里 FirstName 的宽度为 25,所以如果我们从第 0 个位置开始考虑,那么在派生列中,您应该通过给出 SUBSTRING(Data, 0, 25); 来指定它。
其他列也是如此。
很好的解释,湿婆!您的教程和出色的插图指出了微软应该明确的内容
如果没有这两件事,尝试运行导入将给出以下错误消息: 列“列 x”的数据转换返回状态值 4 和状态文本“文本被截断或一个或多个字符在目标代码页中不匹配."。
我已在此错误文本中添加,希望有人在搜索错误原因时会找到此页面。即使事后,您的教程也值得寻找!