是否有人有關於如何使用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