使用SQL Server 2008導入平面文件
導讀:SQL Server 2008推出了一個強大的數據集成和轉換應用程序,叫做SQL Server集成服務(SSIS)。SSIS的一個主要功能是將數據移入和移出SQL Server。外部的數據源可以以任何格式存在,另一個數據庫、Excel工作表、XML文件或一個平面文本文件,這只是僅舉幾例。數據不僅可以從數據源移到目的地,而且它還可以在它移動時被操縱和改變。這些改變可能是簡單的轉換,比如小數四舍五入或將名稱的一個字母大寫,也可能是極其復雜的數據轉換。雖然SSIS可以做的任務列表幾乎是沒有結尾的,但是本篇文章將關注于導入一個文本文件到一個標準的SQL Server數據庫表中去。
BIDS
SQL Server集成服務應用程序是在BIDS(商業智能開發套件)中創建的。BIDS是一個Visual Studio工具,包含在SQL Server內。除了創建SSIS包,BIDS還可以用來為SQL Server報表服務和分析服務創建應用程序。就像SQL Server管理套件是SQL的“瑞士軍刀”一樣,BIDS是一個用于創建導入、導出和數據操縱程序的全能開發工具。
建立
在第一個練習中,我們將導入一個包含聯系名稱的文本文件到SQL Server中去。沒有循環或編程,只是一個簡單的文件導入示例。我創建了一個包含五個聯系人的文本文件,它們由豎線隔開,如下所示。
Gustavo |Achong |1970 Napa Ct. |London
Catherine|Abel |9833 Mt. Dias Blv.|London
Kim|Abercrombie |7484 Roundtree Drive|London
Humberto|Acevedo|9539 Glenside Dr|London
Pilar|Ackerman |1226 Shoe St. |Oxford
每一行包括一個First Name、 Last Name、Address和City。豎線(|)分隔數據的每一列。SQL Server沒有要求必須是豎線。任何分隔符都可以使用,包括普通格式的Tab、空格和逗號。我復制了上面的聯系人到記事本中并將它們保存在我的C:\驅動盤上。在SQL Server中,我使用下面的TSQL創建了一個數據庫叫做“Test”和一個Contacts表:
CREATE TABLE [dbo].[Contacts](
[FirstName] [varchar](50) NULL,
[LastName] [varchar](50) NULL,
[Address] [varchar](50) NULL,
[City] [varchar](50) NULL,
[State] [varchar](50) NULL,
[Zip] [varchar](50) NULL
) ON [PRIMARY]
這個新的Contacts表包括叫做“State”和“Zip”的字段,它們不出現在我們的文本文件中。SSIS在我們的導入過程中將忽略這些字段。
BIDS
要開始這個例子,通過選擇Start->All Programs->Microsoft SQL Server 2008,然后是Microsoft SQL Server Business Intelligence Development Studio(BIDS)從而在Windows中打開BIDS。一個空的BIDS 界面將打開。從頂部的菜單中選擇File->New Project。在New Project對話框中,選擇Business Intelligence Project->Integration Service Project,然后指定一個項目名稱和目錄。這個位置不需要和我們將要導入的文本文件位置一樣。
圖1
點擊OK將彈出一個空白的設計器。注意,設計器頂部有四個標簽頁:Control Flow、Data Flow、Event Handlers和Package Explorer。在SSIS中創建的程序叫做包,而Package Explorer是用來導航它們的。在本文中我們將關注的標簽頁是Control和Data Flow標簽頁。“Control”項是一個對象容器,它使我們的程序具有結構、功能或約束。Data Flow項移動和/或轉換數據值。我認為對于這兩個標簽頁,我們是以相同的方式來分隔GUI代碼和業務邏輯的。Control定義是“什么”( FTP Task、Import Task、Send Mail Task),而Data Flow指定誰以及怎么做。
#p#
從Control Flow Items 的菜單里,拖拉一個“Data Flow Task”對象到設計器上。Data Flow Task將數據從數據源移動到另一個。我右鍵單擊了這個任務并重新命名它為dftContacts,如下所示。
圖2
雙擊這個任務,進入到它的Data Flow屬性中。在這個數據流中,我們將定義我們的文本文件源和SQL Server目標表以及哪些數據字段要移到哪里。
從左邊的Data Flow Services菜單中,拖拉一個“Flat File Source”對象到Data Flow界面上。雙擊它來打開它的屬性。點擊New按鈕來創建到這個文本文件的一個新連接。在Flat File Connection Manager編輯器中,我命名它為“TextFileContacts”,然后瀏覽到硬盤上這個文件的位置。
圖3
雙擊Columns菜單項,然后指定一個|(豎線)作為字段分隔符。點擊刷新按鈕將顯示這個文本文件的五條數據記錄。
圖4
點擊OK返回到Flat File Source Editor。接下來,我們將給這些字段一個頭名稱。盡管這不是所要求的,但是它使得這個包更加易讀。點擊左邊菜單中的“Columns”。在Output字段中,將名稱從Column 0、1、 2、3改為FirstName、 LastName、Address和City,如下所示,然后點擊OK。
圖5
#p#
我們的平面文件導入對象現在完成了。接下來,我們將指定我們的目標SQL Server表。從左邊的菜單中,在工具箱的Data Flow Destination區域中,拖拉一個“SQL Server Destination”到Data Flow工作區域上。接下來,點擊Flat File Source并從它拖拉綠色箭頭到新的SQL Server Destination。
圖6
這指定了這個數據將從Flat File流向SQL Server目標。注意目標圖標中的紅色X。這意味著這個對象沒有被配置。雙擊SQL Server Destination對象來打開它的屬性。點擊Connection Manager上的New,然后點擊Configure OLE DB Connection Manager上的New。接下來,指定你的SQL Server名稱,驗證方法和目標表的名稱。點擊“Test Connection”按鈕來確認連接是有效的。點擊OK然后再點擊OK返回到SQL Design Editor。接下來,從“Use a table or view”下拉列表中選擇新創建的Contacts表。因為我們在SQL Server表中具有的字段比Flat File源中的多,所以點擊左邊菜單中的“Mappings”來核實字段將正確地流出。源和目標應該和SQL Server表匹配,State 和Zip字段被忽略,因為在平面文件源中沒有任何用于它們的導入數據,如下所示。點擊OK。
圖7
這個包現在完成了。點擊頂部菜單中的保存圖標。要運行這個包,點擊頂部菜單中的綠色三角形。這個包將以調試模式執行。當每個對象成功完成后,它將變成綠色。平面文件中的數據記錄轉移到了SQL server中。
總結
SQL Server 集成服務(SSIS)是一個全能的導入、導出、轉換管理器。只要進行少量的練習,就可以很容易地使用BIDS的圖形化界面來創建復雜的工作。上文中也給出了詳細的分析,希望能夠對大家學習SQL Server數據庫有所幫助。
【編輯推薦】