開發者常常以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所示,本例不要求你輸入密碼和用戶名。但是,在操作一個安全數據庫時,則可能必須管理管理員用戶名和密碼。換言之,在操作這種數據庫之前,你必須獲得管理權限。請單擊【下一步】繼續。
圖a

指定數據源和文件。如果操作的是安全數據庫,還需要輸入管理員用戶名和密碼
相反,如果使用的是auw,它首先會要求你選擇新建一個sql server數據庫,或者選擇將sql server數據鏈接到一個access前端。如前所述,dts沒有提供鏈接選項。
選擇目的
在下一個屏幕中,要為導入的數據選擇一個目的(地)。你可選擇當前服務器上的任何數據庫,也可以新建一個數據庫(本例采取的是第二種做法)。不要更改“目的”設置,雖然有幾個選項可供選擇,但本例的“目的”就是【用于sql server的microsoft ole db提供程序】。
雖然能更改服務器,但本例不要求你這樣做。除此之外,還應該保留【使用windows身份驗證】設置。只有sql server 2000才支持windows身份驗證。當然,如果你的安全設置有所區別,那么也可以相應地修改那個選項。
從【數據庫】下拉列表中選擇【<新建>】。隨后會出現【創建數據庫】對話框。請輸入新數據庫的名稱,northwind的數據將導入這個數據庫中,如圖b所示。命名一個工作數據庫時,務必遵循你的公司的命名規范。單擊【確定】后,dts會自動更新【數據庫】下拉列表中的名稱。單擊【確定】繼續。
圖b

限制要導入的數據
指定了access數據源,并新建了一個sql server數據庫之后,就可開始將數據從數據源導入新的sql server數據庫(northwindonlocalss)。但是,也許不能在一個會話中完成全部工作。雖然每次都能拷貝任意數量的表。但假如你需要用一個查詢來限制數據,每次就只能操作那一個表。幸運的是,額外的工作并不需要花多少時間。
首先,讓我們創建一個查詢來限制“產品”表中的數據,從而開始我們的拷貝過程。具體地說,我們只想拷貝那些活動的(而不是中止的)的產品。為此,請選擇【用一條查詢指定要傳輸的數據】,如圖c所示,再單擊【下一步】。
圖c

圖d的sql語句將要導入的記錄限制為那些沒有中止的產品。使用查詢生成器來顯示你要包括的表和列。對于像這樣的簡單語句來說,查詢生成器可能有點兒大材小用,但對于較復雜的語句來說,如果指定了幾個列的名稱,查詢生成器就能有效地防止你犯錯。單擊【分析】來驗證語句的有效性。輸入了正確的sql語句后,請單擊【下一步】。
圖d

在下一個屏幕,單擊【預覽】按鈕,以便核實查詢結果。特別要注意的是,“中止”列中的每一個值都應該為false。預覽完成后,單擊【確定】以關閉【查看數據】屏幕。如果想更改一個列的屬性,可以單擊【轉換】列中的省略號按鈕,但本例不要求你那樣做。相反,我們準備在拷貝整個表時轉換數據。此時,你可能要考慮重命名即將生成的目的表。默認情況下,向導會使用“結果”這個名稱。請在【目的】列中單擊“結果”,把它更改為“產品”。單擊【下一步】繼續。
下一個屏幕顯示了用于調度導入任務的選項:
立即運行——這個選項立即執行導入任務(在dts中稱為“包”)。如果選擇這個選項,那么不會保存任務,相反只是運行它。升遷時請選擇這個選項。 
用復制方法發布目的數據——將目的表用于復制。使用這個選項,dts 導入/導出向導結束運行后將啟動創建發布向導。 
調度dts包以便以后執行——如果想推遲到以后執行,就用這個選項來創建任務。升遷一個數據庫時,你可能不需要保存任何導入任務。單擊這個選項旁邊的省略號按鈕,會顯示一系列調度選項,本文不再贅述。 
保存dts包——將導入的任務保存到以下任何位置之一:sql server、sql server meta data services、結構化存儲文件或者visual basic文件。 
就本例來說,請選擇【立即運行】,如圖e所示,然后單擊【下一步】。
圖e


轉換數據
在如圖f所示的屏幕中,你可更改數據源中的列屬性。下面來進行一次簡單的示范轉換。請單擊“客戶”表右側的省略號按鈕。在隨后出現的屏幕中,請選擇“公司名稱”行,將“大小”從40改為60,如圖g所示。
圖g

單擊【編輯sql】按鈕,查看向導在sql server上創建“客戶”表時會實際運行的create table語句。你可在此窗口中直接修改sql語句,但最好還是在上一個屏幕中,通過圖形用戶界面來進行修改。
你也許會注意到,“客戶id”列沒有標記成“客戶”表的主鍵。通過修改語句,你可快速進行修改。在本例中,你需要在第二行中插入關鍵字primary key not,如圖h所示。然后,單擊【確定】返回上一個屏幕。還要注意,“公司名稱”列的“大小”屬性確實為60。
圖h


在很大程度上,dts對表的升遷是成功的。請注意我們進行了特別處理的“產品”表的“中止”列,以及“客戶”表的“客戶id”列。查看“產品”表的內容(如圖j所示),你會發現每件產品的“中止”值為0(false)。這正是我們希望的結果,因為在升遷“產品”表時,我們故意用一個查詢來限制了拷貝的數據。
圖j

圖k展示了設計視圖中的“客戶”表。如你所見,“客戶id”列是表的主鍵。再查看其他表,你會發現向導沒有拷貝主鍵。相反,利用如圖h所示的sql窗口,就可避免以后重新設置主鍵的必要。
圖k

新聞熱點
疑難解答