是否有人有关于如何使用SSIS包将固定宽度平面文件导入数据库的教程?如何使用SSIS将固定宽度的平面文件导入数据库?
我有一个平面文件包含不同长度的列。
Column name Width
----------- -----
First name 25
Last name 25
Id 9
Date 8
如何将平面文件转换为列?
是否有人有关于如何使用SSIS包将固定宽度平面文件导入数据库的教程?如何使用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 Server数据库中,创建一个使用下SQL脚本部分提供的脚本创建名为dbo.FlatFile
表。
创建一个新的SSIS包并添加一个新的连接到SQL Server数据库的OLE DB连接管理器。我们假设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 [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()函数用于每个列的。 实施例:
列DerivedColumn
姓SUBSTRING(数据,startFrom,长度);
这里的名字有宽度25,所以如果我们考虑到从派生列,则第0位置,你应该给予SUBSTRING(数据,0,25)指定它;
同样,对于其他列。
非常好解释,西瓦!您的教程和优秀的插图指出了微软应该明确
如果没有这两点,运行导入将尝试给这个错误信息: 列“x列”的数据转换返回状态值4和状态文本“文本被截断或一个或多个字符在目标代码页中没有匹配。“
我已在此错误文本中添加了希望有人会在搜索错误原因时找到此页面。即使在事实发生之后,你的重要性也值得寻找!
这与我目前的问题没有关系,但我仍然赞成,只是因为你做了这么好的工作。 – SteveCav 2016-03-01 23:27:01