是否有人有关于如何使用SSIS包将固定宽度平面文件导入数据库的教程?
我有一个包含不同长度列的平面文件。
Column name Width
----------- -----
First name 25
Last name 25
Id 9
Date 8
如何将平面文件转换为列?
答案 0 :(得分:54)
以下是使用 SSIS 2008 R2 创建的示例包,其中介绍了如何将平面文件导入数据库表。
Fixed_Width_File.txt
的固定宽度平面文件,其数据如屏幕截图所示。屏幕截图使用Notepad ++显示文件内容。它能够显示回车和换行等特殊字符。 CR LF
表示行分隔符回车和换行。
在SQL Server数据库中,使用 SQL Scripts 部分下提供的创建脚本创建名为dbo.FlatFile
的表。
创建一个新的SSIS包并添加一个新的OLE DB连接管理器,该管理器将连接到SQL Server数据库。假设OLE DB连接管理器命名为 SQLServer 。
双击数据流任务,您将进入数据流选项卡。在数据流选项卡上,放置平面文件源。双击平面文件源,将出现平面文件源编辑器。单击新建按钮以打开平面文件连接管理器编辑器。
在平面文件源编辑器的“常规”部分,在连接管理器名称中输入一个值(例如源)并输入浏览到平面文件位置并选择文件。此示例使用路径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列更改为数据类型date [DT_DATE]
RowDelimiter
,因为我们不需要它。
OLE DB Destination
。将Flat文件源的输出连接到OLE DB Destination。
SQLServer
的 OLE DB连接管理器,并将表的名称或视图下拉为{ {1}}
此示例应该让您了解如何将固定宽度的平面文件导入数据库。它没有解释如何处理错误日志记录,但这应该可以帮助您在使用软件包时帮助您发现其他与SSIS相关的功能。
希望有所帮助。
<强> [dbo].[FlatFile]
强>:
SQL Scripts
答案 1 :(得分:1)
在派生列转换中,您可以为每个列使用SUBSTRING()函数。 示例:
列DerivedColumn
FirstName SUBSTRING(Data,startFrom,Length);
这里FirstName的宽度为25,所以如果我们从第0个位置然后在派生列中考虑,你应该通过给出SUBSTRING(数据,0,25)来指定它;
与其他列类似。
答案 2 :(得分:1)
很好解释,西瓦!您的教程和优秀插图指出了Microsoft应该明确的内容
如果没有这两件事,尝试运行导入将显示以下错误消息: 列“列x”的数据转换返回状态值4和状态文本“文本被截断或目标代码页中的一个或多个字符不匹配。”。
我已在此错误文本中添加了希望有人在搜索错误原因时找到此页面。即使在事实发生之后,你的音乐也值得一试!