開發人員常常以Access作為原型或者用Access來開發不是很關鍵的應用程式。但是,隨著公司業務的增長,要解決的問題會變得越來越複雜,Access環境可能無法滿足需要。目前,Access 2002的.mdb和.adp檔案都將一個資料庫的長度限制在2 GB以內。這意味著幾乎每個Access和SQL Server開發人員最終都要將一個Access資料庫升遷成一個SQL Server資料庫。
由於升遷已成為極為常見的一個任務,所以Access配套提供了一個“升遷嚮導”。它雖然能完成這個工作,但操作過程並不簡單。SQL Server與Access的幾處不相容的地方是該嚮導無法處理的。你或許不知道,SQL Server的“資料轉換服務”(Data Transformation Services,DTS)也能升遷一個Access資料庫。下面讓我們比較這兩個嚮導,並體驗如何使用DTS來升遷一個實際Access資料庫。這樣一來,你在遇到一個升遷任務時,就能選擇最有效方式。
比較Access升遷嚮導和DTS
Access升遷嚮導(AUW)在Access內部工作,能將資料拷貝到SQL Server表。相反,DTS將來自一個Access資料庫的資料拷貝到SQL Server表中。注意,你可將資料從一個文字檔或者一個OLE DB資料來源(其中自然包括Access資料庫)匯入SQL Server。匯入檔案的同時,還能對資料進行轉換。
DTS的功能非常齊全,有的開發人員認為它比AUW強得多,理由是:
可在匯入資料時更改列(欄位)屬性。
在匯入期間建立查詢,限制實際匯入的資料。
但AUW也有DTS不具備的一個優點,那就是它能將一個Access前端連結到SQL Server資料。DTS則不然,它只能匯入資料,你不能將匯入的資料連結到一個現有的前端。
使用DTS匯入/匯出嚮導
可採取幾種方式來執行DTS:
在Windows【開始】菜單中,選擇【Microsoft SQL Server】,再選擇【匯入和匯出資料】。
運行企業管理器,串連到想匯入資料的一個特定的伺服器和資料庫,然後從【工具】菜單中選擇【資料轉換服務】|【匯入資料】。在一個現有的資料庫中匯入資料時,可使用這個選項。
在企業管理器中,串連到要匯入資料的伺服器,再右擊【資料轉換服務】節點。選擇【所有任務】|【匯入資料】。嚮導最開始會顯示一個提示性螢幕。請單擊【下一步】開始操作。
指定資料來源
升遷Access的第一步是指定資料來源以及包含了待匯入資料的實際檔案。在本例中,請選擇Microsoft Access作為資料來源,再找到Northwind.mdb資料庫(Access配套提供的示範資料庫)。它通常在以下檔案夾中:
LocalDrive:/Program Files/Microsoft Office/Office10/Samples
注意,你可對任意Access資料庫進行升遷。升遷不會對實際的.mdb檔案及其資料產生任何影響。
A所示,本例不要求你輸入密碼和使用者名稱。但是,在操作一個安全資料庫時,則可能必須管理管理使用者名和密碼。換言之,在操作這種資料庫之前,你必須獲得系統管理權限。請單擊【下一步】繼續。
PICA:
指定資料來源和檔案。如果操作的是安全資料庫,還需要輸入管理使用者名和密碼
相反,如果使用的是AUW,它首先會要求你選擇建立一個SQL Server資料庫,或者選擇將SQL Server資料連結到一個Access前端。如前所述,DTS沒有提供連結選項。
選擇目的
在下一個螢幕中,要為匯入的資料選擇一個目的(地)。你可選擇當前伺服器上的任何資料庫,也可以建立一個資料庫(本例採取的是第二種做法)。不要更改“目的”設定,雖然有幾個選項可供選擇,但本例的“目的”就是【用於SQL Server的Microsoft OLE DB提供者】。
雖然能更改伺服器,但本例不要求你這樣做。除此之外,還應該保留【使用Windows身分識別驗證】設定。只有SQL Server 2000才支援Windows身分識別驗證。當然,如果你的安全設定有所區別,那麼也可以相應地修改那個選項。
從【資料庫】下拉式清單中選擇【<建立>】。隨後會出現【建立資料庫】對話方塊。請輸入新資料庫的名稱,Northwind的資料將匯入這個資料庫中,B所示。命名一個工作資料庫時,務必遵循你的公司的命名規範。單擊【確定】後,DTS會自動更新【資料庫】下拉式清單中的名稱。單擊【確定】繼續。
PICB:
指定新的資料庫名稱
限制要匯入的資料
指定了Access資料來源,並建立了一個SQL Server資料庫之後,就可開始將資料從資料來源匯入新的SQL Server資料庫(NorthwindonlocalSS)。但是,也許不能在一個會話中完成全部工作。雖然每次都能拷貝任意數量的表。但假如你需要用一個查詢來限制資料,每次就只能操作那一個表。幸運的是,額外的工作並不需要花多少時間。
首先,讓我們建立一個查詢來限制“產品”表中的資料,從而開始我們的拷貝過程。具體地說,我們只想拷貝那些活動的(而不是中止的)的產品。為此,請選擇【用一條查詢指定要傳輸的資料】,C所示,再單擊【下一步】。
PICC:
可拷貝幾個表,或者拷貝一個查詢的結果
圖D的SQL語句將要匯入的記錄限制為那些沒有中止的產品。使用查詢產生器來顯示你要包括的表和列。對於像這樣的簡單語句來說,查詢產生器可能有點兒大材小用,但對於較複雜的語句來說,如果指定了幾個列的名稱,查詢產生器就能有效地防止你犯錯。單擊【分析】來驗證語句的有效性。輸入了正確的SQL語句後,請單擊【下一步】。
PICD:
輸入對資料進行限制的SQL語句
在下一個螢幕,單擊【預覽】按鈕,以便核實查詢結果。特別要注意的是,“中止”列中的每一個值都應該為False。預覽完成後,單擊【確定】以關閉【查看資料】螢幕。如果想更改一個列的屬性,可以單擊【轉換】列中的省略符號按鈕,但本例不要求你那樣做。相反,我們準備在拷貝整個表時轉換資料。此時,你可能要考慮重新命名即將產生的目的表。預設情況下,嚮導會使用“結果”這個名稱。請在【目的】列中單擊“結果”,把它更改為“產品”。單擊【下一步】繼續。
下一個螢幕顯示了用於調度匯入任務的選項:
立即運行——這個選項立即執行匯入任務(在DTS中稱為“包”)。如果選擇這個選項,那麼不會儲存任務,相反只是運行它。升遷時請選擇這個選項。
用複製方法發布目的資料——將目的表用於複製。使用這個選項,DTS 匯入/匯出嚮導結束運行後將啟動建立發布嚮導。
調度DTS包以便以後執行——如果想延遲到以後執行,就用這個選項來建立任務。升遷一個資料庫時,你可能不需要儲存任何匯入任務。單擊這個選項旁邊的省略符號按鈕,會顯示一系列調度選項,本文不再贅述。
儲存DTS包——將匯入的任務儲存到以下任何位置之一:SQL Server、SQL Server Meta Data Services、結構化隱藏檔或者Visual Basic檔案。
就本例來說,請選擇【立即運行】,E所示,然後單擊【下一步】。
PICE:
可選擇立即運行匯入任務。進行升遷時,一般要選擇這個選項
為了執行這個包,請在最後一個螢幕上單擊【完成】。之後,嚮導會用一個對話方塊來顯示進度。在狀態列表中,顯示了每一項單獨的任務,並隨時指出它們是否完成。所有任務完成後,單擊【完成】關閉嚮導。
現在,DTS已經將一個表成功升遷為一個新的SQL Server資料庫(即NorthwindonlocalSS)。你還需要拷貝剩餘的表,所以請重新啟動DTS。最開始,還是將資料來源指定為Northwind資料庫。接著,從【資料庫】下拉式清單中選擇【NorthwindonlocalSS】,單擊【下一步】。
在下一個螢幕中,選擇【從來源資料庫複製表和視圖】,再單擊【下一步】。選擇想要拷貝的每一個表,F所示。記住,你現在可以跳過“產品”表,因為剛才已經升遷了那個表。因此,請在此螢幕中選擇除“產品”之外的其他所有表(和查詢)。
PICF:
勾選你想匯入的表和查詢(視圖)
轉換資料
在F所示的螢幕中,你可更改資料來源中的列屬性。下面來進行一次簡單的示範轉換。請單擊“客戶”表右側的省略符號按鈕。在隨後出現的螢幕中,請選擇“公司名稱”行,將“大小”從40改為60,G所示。
PICG:
更改一個列的“大小”屬性
單擊【編輯SQL】按鈕,查看嚮導在SQL Server上建立“客戶”表時會實際啟動並執行CREATE TABLE語句。你可在此視窗中直接修改SQL語句,但最好還是在上一個螢幕中,通過圖形化使用者介面來進行修改。
你也許會注意到,“客戶ID”列沒有標記成“客戶”表的主鍵。通過修改語句,你可快速進行修改。在本例中,你需要在第二行中插入關鍵字PRIMARY KEY NOT,H所示。然後,單擊【確定】返回上一個螢幕。還要注意,“公司名稱”列的“大小”屬性確實為60。
PICH:
檢查SQL CREATE TABLE語句
在【轉換】卡片中,你可修改用於將資料拷貝到SQL Server目的表的轉換指令碼。此外,還可更改在這個過程中使用的指令碼語言。雖然你在升遷Access資料庫時可能用不著這個卡片,但它在其他情況下可能非常有用。單擊【確定】返回前一個螢幕,再單擊【下一步】。和以前一樣,選擇【立即運行】選項,單擊【下一步】,再單擊【完成】,開始執行嚮導。
嚮導完成之後,單擊【確定】清除提示性訊息(它告訴你拷貝了多少個表和查詢)。那條訊息可能使你感到吃驚,因為它聲稱拷貝了23個表,但Northwind實際只有8個表。下一節將解釋原因。請單擊【完成】關閉嚮導。
查看結果
現在,我們可在企業管理器中查看結果。圖I展示了本機伺服器上的新資料庫。在【表】列表中,現在包括了所有Access查詢。注意,嚮導已將查詢轉換成了表。這種格式的查詢可能沒有任何用處,但這裡只是希望向你說明像這樣升遷一個查詢時,最終會發生什麼事情。真正進行升遷時,你可能不希望拷貝查詢。
PICI:
使用企業管理器查看新資料庫
在很大程度上,DTS對錶的升遷是成功的。請注意我們進行了特別處理的“產品”表的“中止”列,以及“客戶”表的“客戶ID”列。查看“產品”表的內容(J所示),你會發現每件產品的“中止”值為0(False)。這正是我們希望的結果,因為在升遷“產品”表時,我們故意用一個查詢來限制了拷貝的資料。
PICJ:
“中止”列只含有0(或False)值
圖K展示了設計檢視中的“客戶”表。如你所見,“客戶ID”列是表的主鍵。再查看其他表,你會發現嚮導沒有拷貝主鍵。相反,利用H所示的SQL視窗,就可避免以後重新設定主鍵的必要。
PICK:
嚮導正確設定了這個表的主鍵
最後的工作
嚮導不會自動將主鍵從資料來源拷貝到目的表。可像前面對“客戶”表做的那樣設定主鍵(參見圖H),也可在最終的目的表中設定它們。除此之外,還有幾件事情是嚮導不會做的:
嚮導不保持關係;必須在SQL Server中重建它們。
嚮導不強制資料來源中設定的參考完整性規則。
升遷
面臨一個升遷任務時,Access的升遷嚮導或者SQL Server的DTS都可以考慮。兩者都能很好地升遷資料。但是,DTS嚮導顯得更容易操作,而且功能齊全,不依賴於Access。