使用SQL Server 2008導(dǎo)入平面文件
導(dǎo)讀:SQL Server 2008推出了一個(gè)強(qiáng)大的數(shù)據(jù)集成和轉(zhuǎn)換應(yīng)用程序,叫做SQL Server集成服務(wù)(SSIS)。SSIS的一個(gè)主要功能是將數(shù)據(jù)移入和移出SQL Server。外部的數(shù)據(jù)源可以以任何格式存在,另一個(gè)數(shù)據(jù)庫(kù)、Excel工作表、XML文件或一個(gè)平面文本文件,這只是僅舉幾例。數(shù)據(jù)不僅可以從數(shù)據(jù)源移到目的地,而且它還可以在它移動(dòng)時(shí)被操縱和改變。這些改變可能是簡(jiǎn)單的轉(zhuǎn)換,比如小數(shù)四舍五入或?qū)⒚Q的一個(gè)字母大寫,也可能是極其復(fù)雜的數(shù)據(jù)轉(zhuǎn)換。雖然SSIS可以做的任務(wù)列表幾乎是沒(méi)有結(jié)尾的,但是本篇文章將關(guān)注于導(dǎo)入一個(gè)文本文件到一個(gè)標(biāo)準(zhǔn)的SQL Server數(shù)據(jù)庫(kù)表中去。
BIDS
SQL Server集成服務(wù)應(yīng)用程序是在BIDS(商業(yè)智能開發(fā)套件)中創(chuàng)建的。BIDS是一個(gè)Visual Studio工具,包含在SQL Server內(nèi)。除了創(chuàng)建SSIS包,BIDS還可以用來(lái)為SQL Server報(bào)表服務(wù)和分析服務(wù)創(chuàng)建應(yīng)用程序。就像SQL Server管理套件是SQL的“瑞士軍刀”一樣,BIDS是一個(gè)用于創(chuàng)建導(dǎo)入、導(dǎo)出和數(shù)據(jù)操縱程序的全能開發(fā)工具。
建立
在第一個(gè)練習(xí)中,我們將導(dǎo)入一個(gè)包含聯(lián)系名稱的文本文件到SQL Server中去。沒(méi)有循環(huán)或編程,只是一個(gè)簡(jiǎn)單的文件導(dǎo)入示例。我創(chuàng)建了一個(gè)包含五個(gè)聯(lián)系人的文本文件,它們由豎線隔開,如下所示。
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
每一行包括一個(gè)First Name、 Last Name、Address和City。豎線(|)分隔數(shù)據(jù)的每一列。SQL Server沒(méi)有要求必須是豎線。任何分隔符都可以使用,包括普通格式的Tab、空格和逗號(hào)。我復(fù)制了上面的聯(lián)系人到記事本中并將它們保存在我的C:\驅(qū)動(dòng)盤上。在SQL Server中,我使用下面的TSQL創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)叫做“Test”和一個(gè)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]
這個(gè)新的Contacts表包括叫做“State”和“Zip”的字段,它們不出現(xiàn)在我們的文本文件中。SSIS在我們的導(dǎo)入過(guò)程中將忽略這些字段。
BIDS
要開始這個(gè)例子,通過(guò)選擇Start->All Programs->Microsoft SQL Server 2008,然后是Microsoft SQL Server Business Intelligence Development Studio(BIDS)從而在Windows中打開BIDS。一個(gè)空的BIDS 界面將打開。從頂部的菜單中選擇File->New Project。在New Project對(duì)話框中,選擇Business Intelligence Project->Integration Service Project,然后指定一個(gè)項(xiàng)目名稱和目錄。這個(gè)位置不需要和我們將要導(dǎo)入的文本文件位置一樣。
圖1
點(diǎn)擊OK將彈出一個(gè)空白的設(shè)計(jì)器。注意,設(shè)計(jì)器頂部有四個(gè)標(biāo)簽頁(yè):Control Flow、Data Flow、Event Handlers和Package Explorer。在SSIS中創(chuàng)建的程序叫做包,而Package Explorer是用來(lái)導(dǎo)航它們的。在本文中我們將關(guān)注的標(biāo)簽頁(yè)是Control和Data Flow標(biāo)簽頁(yè)。“Control”項(xiàng)是一個(gè)對(duì)象容器,它使我們的程序具有結(jié)構(gòu)、功能或約束。Data Flow項(xiàng)移動(dòng)和/或轉(zhuǎn)換數(shù)據(jù)值。我認(rèn)為對(duì)于這兩個(gè)標(biāo)簽頁(yè),我們是以相同的方式來(lái)分隔GUI代碼和業(yè)務(wù)邏輯的。Control定義是“什么”( FTP Task、Import Task、Send Mail Task),而Data Flow指定誰(shuí)以及怎么做。
#p#
從Control Flow Items 的菜單里,拖拉一個(gè)“Data Flow Task”對(duì)象到設(shè)計(jì)器上。Data Flow Task將數(shù)據(jù)從數(shù)據(jù)源移動(dòng)到另一個(gè)。我右鍵單擊了這個(gè)任務(wù)并重新命名它為dftContacts,如下所示。
圖2
雙擊這個(gè)任務(wù),進(jìn)入到它的Data Flow屬性中。在這個(gè)數(shù)據(jù)流中,我們將定義我們的文本文件源和SQL Server目標(biāo)表以及哪些數(shù)據(jù)字段要移到哪里。
從左邊的Data Flow Services菜單中,拖拉一個(gè)“Flat File Source”對(duì)象到Data Flow界面上。雙擊它來(lái)打開它的屬性。點(diǎn)擊New按鈕來(lái)創(chuàng)建到這個(gè)文本文件的一個(gè)新連接。在Flat File Connection Manager編輯器中,我命名它為“TextFileContacts”,然后瀏覽到硬盤上這個(gè)文件的位置。
圖3
雙擊Columns菜單項(xiàng),然后指定一個(gè)|(豎線)作為字段分隔符。點(diǎn)擊刷新按鈕將顯示這個(gè)文本文件的五條數(shù)據(jù)記錄。
圖4
點(diǎn)擊OK返回到Flat File Source Editor。接下來(lái),我們將給這些字段一個(gè)頭名稱。盡管這不是所要求的,但是它使得這個(gè)包更加易讀。點(diǎn)擊左邊菜單中的“Columns”。在Output字段中,將名稱從Column 0、1、 2、3改為FirstName、 LastName、Address和City,如下所示,然后點(diǎn)擊OK。
圖5
#p#
我們的平面文件導(dǎo)入對(duì)象現(xiàn)在完成了。接下來(lái),我們將指定我們的目標(biāo)SQL Server表。從左邊的菜單中,在工具箱的Data Flow Destination區(qū)域中,拖拉一個(gè)“SQL Server Destination”到Data Flow工作區(qū)域上。接下來(lái),點(diǎn)擊Flat File Source并從它拖拉綠色箭頭到新的SQL Server Destination。
圖6
這指定了這個(gè)數(shù)據(jù)將從Flat File流向SQL Server目標(biāo)。注意目標(biāo)圖標(biāo)中的紅色X。這意味著這個(gè)對(duì)象沒(méi)有被配置。雙擊SQL Server Destination對(duì)象來(lái)打開它的屬性。點(diǎn)擊Connection Manager上的New,然后點(diǎn)擊Configure OLE DB Connection Manager上的New。接下來(lái),指定你的SQL Server名稱,驗(yàn)證方法和目標(biāo)表的名稱。點(diǎn)擊“Test Connection”按鈕來(lái)確認(rèn)連接是有效的。點(diǎn)擊OK然后再點(diǎn)擊OK返回到SQL Design Editor。接下來(lái),從“Use a table or view”下拉列表中選擇新創(chuàng)建的Contacts表。因?yàn)槲覀冊(cè)赟QL Server表中具有的字段比Flat File源中的多,所以點(diǎn)擊左邊菜單中的“Mappings”來(lái)核實(shí)字段將正確地流出。源和目標(biāo)應(yīng)該和SQL Server表匹配,State 和Zip字段被忽略,因?yàn)樵谄矫嫖募粗袥](méi)有任何用于它們的導(dǎo)入數(shù)據(jù),如下所示。點(diǎn)擊OK。
圖7
這個(gè)包現(xiàn)在完成了。點(diǎn)擊頂部菜單中的保存圖標(biāo)。要運(yùn)行這個(gè)包,點(diǎn)擊頂部菜單中的綠色三角形。這個(gè)包將以調(diào)試模式執(zhí)行。當(dāng)每個(gè)對(duì)象成功完成后,它將變成綠色。平面文件中的數(shù)據(jù)記錄轉(zhuǎn)移到了SQL server中。
總結(jié)
SQL Server 集成服務(wù)(SSIS)是一個(gè)全能的導(dǎo)入、導(dǎo)出、轉(zhuǎn)換管理器。只要進(jìn)行少量的練習(xí),就可以很容易地使用BIDS的圖形化界面來(lái)創(chuàng)建復(fù)雜的工作。上文中也給出了詳細(xì)的分析,希望能夠?qū)Υ蠹覍W(xué)習(xí)SQL Server數(shù)據(jù)庫(kù)有所幫助。
【編輯推薦】