開發(fā)者常常以access作為原型或者用Access來(lái)開發(fā)不是很關(guān)鍵的應(yīng)用程序。但是,隨著公司業(yè)務(wù)的增長(zhǎng),要解決的問(wèn)題會(huì)變得越來(lái)越復(fù)雜,Access環(huán)境可能無(wú)法滿足需要。目前,Access 2002的.mdb和.adp文件都將一個(gè)數(shù)據(jù)庫(kù)的長(zhǎng)度限制在2 GB以內(nèi)。這意味著幾乎每個(gè)Access和SQL Server開發(fā)者最終都要將一個(gè)Access數(shù)據(jù)庫(kù)升遷成一個(gè)SQL Server數(shù)據(jù)庫(kù)。
由于升遷已成為極為常見(jiàn)的一個(gè)任務(wù),所以Access配套提供了一個(gè)“升遷向?qū)А薄Km然能完成這個(gè)工作,但操作過(guò)程并不簡(jiǎn)單。SQL Server與Access的幾處不兼容的地方是該向?qū)o(wú)法處理的。你或許不知道,SQL Server的“數(shù)據(jù)轉(zhuǎn)換服務(wù)”(Data Transformation Services,DTS)也能升遷一個(gè)Access數(shù)據(jù)庫(kù)。下面讓我們比較這兩個(gè)向?qū)ВⅢw驗(yàn)如何使用DTS來(lái)升遷一個(gè)實(shí)際Access數(shù)據(jù)庫(kù)。這樣一來(lái),你在遇到一個(gè)升遷任務(wù)時(shí),就能選擇最有效的方式。
比較Access升遷向?qū)Ш虳TS
Access升遷向?qū)ВˋUW)在Access內(nèi)部工作,能將數(shù)據(jù)拷貝到SQL Server表。相反,DTS將來(lái)自一個(gè)Access數(shù)據(jù)庫(kù)的數(shù)據(jù)拷貝到SQL Server表中。注意,你可將數(shù)據(jù)從一個(gè)文本文件或者一個(gè)OLE DB數(shù)據(jù)源(其中自然包括Access數(shù)據(jù)庫(kù))導(dǎo)入SQL Server。導(dǎo)入文件的同時(shí),還能對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換。
DTS的功能非常齊全,有的開發(fā)者認(rèn)為它比AUW強(qiáng)得多,理由是:
可在導(dǎo)入數(shù)據(jù)時(shí)更改列(字段)屬性。
在導(dǎo)入期間創(chuàng)建查詢,限制實(shí)際導(dǎo)入的數(shù)據(jù)。
但AUW也有DTS不具備的一個(gè)優(yōu)點(diǎn),那就是它能將一個(gè)Access前端鏈接到SQL Server數(shù)據(jù)。DTS則不然,它只能導(dǎo)入數(shù)據(jù),你不能將導(dǎo)入的數(shù)據(jù)鏈接到一個(gè)現(xiàn)有的前端。
使用DTS導(dǎo)入/導(dǎo)出向?qū)?/P>
可采取幾種方式來(lái)執(zhí)行DTS:
在Windows【開始】菜單中,選擇【Microsoft SQL Server】,再選擇【導(dǎo)入和導(dǎo)出數(shù)據(jù)】。
運(yùn)行企業(yè)管理器,連接到想導(dǎo)入數(shù)據(jù)的一個(gè)特定的服務(wù)器和數(shù)據(jù)庫(kù),然后從【工具】菜單中選擇【數(shù)據(jù)轉(zhuǎn)換服務(wù)】|【導(dǎo)入數(shù)據(jù)】。在一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)中導(dǎo)入數(shù)據(jù)時(shí),可使用這個(gè)選項(xiàng)。
在企業(yè)管理器中,連接到要導(dǎo)入數(shù)據(jù)的服務(wù)器,再右擊【數(shù)據(jù)轉(zhuǎn)換服務(wù)】節(jié)點(diǎn)。選擇【所有任務(wù)】|【導(dǎo)入數(shù)據(jù)】。向?qū)ё铋_始會(huì)顯示一個(gè)提示性屏幕。請(qǐng)單擊【下一步】開始操作。
指定數(shù)據(jù)源
升遷Access的第一步是指定數(shù)據(jù)源以及包含了待導(dǎo)入數(shù)據(jù)的實(shí)際文件。在本例中,請(qǐng)選擇Microsoft Access作為數(shù)據(jù)源,再找到Northwind.mdb數(shù)據(jù)庫(kù)(Access配套提供的示范數(shù)據(jù)庫(kù))。它通常在以下文件夾中:
LocalDrive:/PRogram Files/Microsoft Office/Office10/Samples
注意,你可對(duì)任意Access數(shù)據(jù)庫(kù)進(jìn)行升遷。升遷不會(huì)對(duì)實(shí)際的.mdb文件及其數(shù)據(jù)產(chǎn)生任何影響。
如圖A所示,本例不要求你輸入密碼和用戶名。但是,在操作一個(gè)安全數(shù)據(jù)庫(kù)時(shí),則可能必須管理管理員用戶名和密碼。換言之,在操作這種數(shù)據(jù)庫(kù)之前,你必須獲得管理權(quán)限。請(qǐng)單擊【下一步】繼續(xù)。
圖A

指定數(shù)據(jù)源和文件。如果操作的是安全數(shù)據(jù)庫(kù),還需要輸入管理員用戶名和密碼
相反,如果使用的是AUW,它首先會(huì)要求你選擇新建一個(gè)SQL Server數(shù)據(jù)庫(kù),或者選擇將SQL Server數(shù)據(jù)鏈接到一個(gè)Access前端。如前所述,DTS沒(méi)有提供鏈接選項(xiàng)。
選擇目的
在下一個(gè)屏幕中,要為導(dǎo)入的數(shù)據(jù)選擇一個(gè)目的(地)。你可選擇當(dāng)前服務(wù)器上的任何數(shù)據(jù)庫(kù),也可以新建一個(gè)數(shù)據(jù)庫(kù)(本例采取的是第二種做法)。不要更改“目的”設(shè)置,雖然有幾個(gè)選項(xiàng)可供選擇,但本例的“目的”就是【用于SQL Server的Microsoft OLE DB提供程序】。
雖然能更改服務(wù)器,但本例不要求你這樣做。除此之外,還應(yīng)該保留【使用Windows身份驗(yàn)證】設(shè)置。只有SQL Server 2000才支持Windows身份驗(yàn)證。當(dāng)然,如果你的安全設(shè)置有所區(qū)別,那么也可以相應(yīng)地修改那個(gè)選項(xiàng)。
從【數(shù)據(jù)庫(kù)】下拉列表中選擇【<新建>】。隨后會(huì)出現(xiàn)【創(chuàng)建數(shù)據(jù)庫(kù)】對(duì)話框。請(qǐng)輸入新數(shù)據(jù)庫(kù)的名稱,Northwind的數(shù)據(jù)將導(dǎo)入這個(gè)數(shù)據(jù)庫(kù)中,如圖B所示。命名一個(gè)工作數(shù)據(jù)庫(kù)時(shí),務(wù)必遵循你的公司的命名規(guī)范。單擊【確定】后,DTS會(huì)自動(dòng)更新【數(shù)據(jù)庫(kù)】下拉列表中的名稱。單擊【確定】繼續(xù)。
圖B

限制要導(dǎo)入的數(shù)據(jù)
指定了Access數(shù)據(jù)源,并新建了一個(gè)SQL Server數(shù)據(jù)庫(kù)之后,就可開始將數(shù)據(jù)從數(shù)據(jù)源導(dǎo)入新的SQL Server數(shù)據(jù)庫(kù)(NorthwindonlocalSS)。但是,也許不能在一個(gè)會(huì)話中完成全部工作。雖然每次都能拷貝任意數(shù)量的表。但假如你需要用一個(gè)查詢來(lái)限制數(shù)據(jù),每次就只能操作那一個(gè)表。幸運(yùn)的是,額外的工作并不需要花多少時(shí)間。
首先,讓我們創(chuàng)建一個(gè)查詢來(lái)限制“產(chǎn)品”表中的數(shù)據(jù),從而開始我們的拷貝過(guò)程。具體地說(shuō),我們只想拷貝那些活動(dòng)的(而不是中止的)的產(chǎn)品。為此,請(qǐng)選擇【用一條查詢指定要傳輸?shù)臄?shù)據(jù)】,如圖C所示,再單擊【下一步】。
圖C

圖D的SQL語(yǔ)句將要導(dǎo)入的記錄限制為那些沒(méi)有中止的產(chǎn)品。使用查詢生成器來(lái)顯示你要包括的表和列。對(duì)于像這樣的簡(jiǎn)單語(yǔ)句來(lái)說(shuō),查詢生成器可能有點(diǎn)兒大材小用,但對(duì)于較復(fù)雜的語(yǔ)句來(lái)說(shuō),如果指定了幾個(gè)列的名稱,查詢生成器就能有效地防止你犯錯(cuò)。單擊【分析】來(lái)驗(yàn)證語(yǔ)句的有效性。輸入了正確的SQL語(yǔ)句后,請(qǐng)單擊【下一步】。
圖D

在下一個(gè)屏幕,單擊【預(yù)覽】按鈕,以便核實(shí)查詢結(jié)果。特別要注意的是,“中止”列中的每一個(gè)值都應(yīng)該為False。預(yù)覽完成后,單擊【確定】以關(guān)閉【查看數(shù)據(jù)】屏幕。如果想更改一個(gè)列的屬性,可以單擊【轉(zhuǎn)換】列中的省略號(hào)按鈕,但本例不要求你那樣做。相反,我們準(zhǔn)備在拷貝整個(gè)表時(shí)轉(zhuǎn)換數(shù)據(jù)。此時(shí),你可能要考慮重命名即將生成的目的表。默認(rèn)情況下,向?qū)?huì)使用“結(jié)果”這個(gè)名稱。請(qǐng)?jiān)凇灸康摹苛兄袉螕簟敖Y(jié)果”,把它更改為“產(chǎn)品”。單擊【下一步】繼續(xù)。
下一個(gè)屏幕顯示了用于調(diào)度導(dǎo)入任務(wù)的選項(xiàng):
立即運(yùn)行——這個(gè)選項(xiàng)立即執(zhí)行導(dǎo)入任務(wù)(在DTS中稱為“包”)。如果選擇這個(gè)選項(xiàng),那么不會(huì)保存任務(wù),相反只是運(yùn)行它。升遷時(shí)請(qǐng)選擇這個(gè)選項(xiàng)。
用復(fù)制方法發(fā)布目的數(shù)據(jù)——將目的表用于復(fù)制。使用這個(gè)選項(xiàng),DTS 導(dǎo)入/導(dǎo)出向?qū)ЫY(jié)束運(yùn)行后將啟動(dòng)創(chuàng)建發(fā)布向?qū)А?
調(diào)度DTS包以便以后執(zhí)行——如果想推遲到以后執(zhí)行,就用這個(gè)選項(xiàng)來(lái)創(chuàng)建任務(wù)。升遷一個(gè)數(shù)據(jù)庫(kù)時(shí),你可能不需要保存任何導(dǎo)入任務(wù)。單擊這個(gè)選項(xiàng)旁邊的省略號(hào)按鈕,會(huì)顯示一系列調(diào)度選項(xiàng),本文不再贅述。
保存DTS包——將導(dǎo)入的任務(wù)保存到以下任何位置之一:SQL Server、SQL Server Meta Data Services、結(jié)構(gòu)化存儲(chǔ)文件或者Visual Basic文件。
就本例來(lái)說(shuō),請(qǐng)選擇【立即運(yùn)行】,如圖E所示,然后單擊【下一步】。
圖E


轉(zhuǎn)換數(shù)據(jù)
在如圖F所示的屏幕中,你可更改數(shù)據(jù)源中的列屬性。下面來(lái)進(jìn)行一次簡(jiǎn)單的示范轉(zhuǎn)換。請(qǐng)單擊“客戶”表右側(cè)的省略號(hào)按鈕。在隨后出現(xiàn)的屏幕中,請(qǐng)選擇“公司名稱”行,將“大小”從40改為60,如圖G所示。
圖G

單擊【編輯SQL】按鈕,查看向?qū)г赟QL Server上創(chuàng)建“客戶”表時(shí)會(huì)實(shí)際運(yùn)行的CREATE TABLE語(yǔ)句。你可在此窗口中直接修改SQL語(yǔ)句,但最好還是在上一個(gè)屏幕中,通過(guò)圖形用戶界面來(lái)進(jìn)行修改。
你也許會(huì)注意到,“客戶ID”列沒(méi)有標(biāo)記成“客戶”表的主鍵。通過(guò)修改語(yǔ)句,你可快速進(jìn)行修改。在本例中,你需要在第二行中插入關(guān)鍵字PRIMARY KEY NOT,如圖H所示。然后,單擊【確定】返回上一個(gè)屏幕。還要注意,“公司名稱”列的“大小”屬性確實(shí)為60。
圖H


在很大程度上,DTS對(duì)表的升遷是成功的。請(qǐng)注意我們進(jìn)行了特別處理的“產(chǎn)品”表的“中止”列,以及“客戶”表的“客戶ID”列。查看“產(chǎn)品”表的內(nèi)容(如圖J所示),你會(huì)發(fā)現(xiàn)每件產(chǎn)品的“中止”值為0(False)。這正是我們希望的結(jié)果,因?yàn)樵谏w“產(chǎn)品”表時(shí),我們故意用一個(gè)查詢來(lái)限制了拷貝的數(shù)據(jù)。
圖J

圖K展示了設(shè)計(jì)視圖中的“客戶”表。如你所見(jiàn),“客戶ID”列是表的主鍵。再查看其他表,你會(huì)發(fā)現(xiàn)向?qū)](méi)有拷貝主鍵。相反,利用如圖H所示的SQL窗口,就可避免以后重新設(shè)置主鍵的必要。
圖K

新聞熱點(diǎn)
疑難解答
圖片精選