隨著用戶對于企業(yè)級高性能數(shù)據(jù)庫的需求的增長,用戶時常要從MicrosoftAccessJet引擎的文件-服務器環(huán)境下轉換到MicrosoftSQLServer的客戶-服務器環(huán)境。MicrosoftOffice2000中的Access2000UpsizingWizard可實現(xiàn)將數(shù)據(jù)表和查詢轉移到SQLServer7.0中。如果您用的是Access的較早的版本,您可以先將它升級為Access2000,然后再使用其中的UpsizingWizard,從而將您的應用移植到SQLServer中。 如果您并不太愿意采用Access2000和UpsizingWizard來實現(xiàn)移植,本文可以作為將Access2000移植到SQLServer的一個指南。轉移一個Access上的應用首先需要將數(shù)據(jù)轉移到SQLServer,然后將查詢轉移進數(shù)據(jù)庫,或是轉移為SQL文件以備稍后執(zhí)行。最后要采取的步驟是移植應用程序。 數(shù)據(jù)庫移植中用到的SQLServer工具 SQLServer管理器(SQLServerEnterpriseManager) SQLServer管理器允許對SQLServer以及SQLServer中的對象進行企業(yè)級的配置和管理。SQLServer管理器提供一個強有力的scheduling引擎,高度的容錯力和一個嵌入式的復制管理界面。使用SQLServer管理器可以實現(xiàn)以下功能: 管理連接和用戶許可 創(chuàng)建腳本程序 管理SQLServer對象的備份 備份數(shù)據(jù)和事務處理日志 管理表、視圖、存儲過程、觸發(fā)器、索引、規(guī)則、默認值以及用戶定義的數(shù)據(jù)類型 建立全文本索引、數(shù)據(jù)庫圖表和數(shù)據(jù)庫維護計劃 輸入和輸出數(shù)據(jù) 轉換數(shù)據(jù) 執(zhí)行各種網(wǎng)絡管理任務 在以MicrosoftWindowsNT為操作系統(tǒng)的計算機中,SQLServerManager由SQLServerSetup進行安裝,并被默認為服務器組件,而在運行著WindowsNT和MicrosoftWindows95的機器上,它將被默認為客戶方組件。您將從SQLServerManager的圖形用戶界面中啟動數(shù)據(jù)轉移服務(DTS,DataTransformationServices)。 數(shù)據(jù)轉移服務(DataTransformationServices,DTS) 數(shù)據(jù)轉移服務允許您在多種異構數(shù)據(jù)源之間輸入和輸出數(shù)據(jù),這些數(shù)據(jù)源采用基于數(shù)據(jù)庫的OLE體系結構;或在使用SQLServer7.0的多個計算機之間轉移數(shù)據(jù)庫和數(shù)據(jù)庫對象;您還可以通過運用數(shù)據(jù)轉移服務,更便捷地在一個在線事務處理系統(tǒng)(OLTP)中建立數(shù)據(jù)倉庫和數(shù)據(jù)中心。 DTSWizard允許您交互地創(chuàng)建DTS包,通過OLEDB和ODBC來輸入、輸出、驗證和轉移數(shù)據(jù)。DTSWizard還允許您在關系型數(shù)據(jù)庫之間拷貝圖解(schema)和數(shù)據(jù)。 SQLServer查詢分析器(QueryAnalyzer) SQLServer查詢分析器是一種圖形化的查詢工具,通過它您可以分析一個查詢,同時執(zhí)行多個查詢,查看數(shù)據(jù)和獲取索引建議。SQLServer查詢分析器提供了showplan選項,可用來顯示SQLServer查詢優(yōu)化器所選擇的數(shù)據(jù)提取方法。 SQLServerProfiler SQLServerProfiler可以實時地捕獲數(shù)據(jù)庫服務器活動的連續(xù)記錄。SQLServerProfiler允許您監(jiān)控SQLServer產生的事件,過濾基于用戶指定標準的事件,或將操作步驟輸出到屏幕、文件或數(shù)據(jù)表。運用SQLServerProfiler,您可以重新執(zhí)行所捕獲的上一次操作。這種工具可以幫助應用程序開發(fā)者識別那些可能會降低應用程序性能的事務處理。在將一個基于文件體系結構的應用程序移植到客戶/服務器結構中時該特性是很有用的,因為它的最后一步包括對面向新的客戶/服務器環(huán)境的應用程序進行優(yōu)化。 轉移表和數(shù)據(jù) 使用DTSWizard將您的Access數(shù)據(jù)轉移到SQLServer,可采取以下步驟: 在SQLServerManager(EnterpriseManager)的工具菜單中,鼠標指向“DataTransformationServices”,然后點擊“ImportData.” 在“選擇數(shù)據(jù)源”(ChooseaDataSource)的對話窗口中,選擇MicrosoftAccess為數(shù)據(jù)源,然后輸入您的.mdb文件名(mdb為文件擴展名)或者選擇瀏覽文件。 在“選擇數(shù)據(jù)目標”(ChooseaDestination)的對話窗口中,選擇“MicrosoftOLEDBProviderforSQLServer”,再選擇好數(shù)據(jù)庫服務器,然后點擊所需的認證模式。 在“指定表備份或查詢”(SpecifyTableCopyorQuery)的對話窗口中,點擊“拷貝表”(Copytables)。 在“選擇數(shù)據(jù)源”的對話窗口中,點擊“選擇所有項”(SelectAll)。 移植MicrosoftAccess查詢 您可以將Access的查詢以下面的格式之一轉移至SQLServer中: 事務處理SQL腳本程序(Transact-SQLscripts) 事務處理SQL語句通常是由數(shù)據(jù)庫程序調用的,但是您也可以使用SQLServer7.0中包含的SQLServer查詢分析器直接運行它們。SQLServer查詢分析器可幫助開發(fā)者測試事務處理SQL語句,或運行那些執(zhí)行查詢處理、數(shù)據(jù)操作(插入,修改,刪除)和數(shù)據(jù)定義(創(chuàng)建表)的事務處理SQL語句。 存儲過程(Storedprocedures) 開發(fā)者可以將大部分產生自Access查詢(查找,插入,修改,刪除)的事務處理SQL語句轉移至存儲過程。用事務處理SQL語句書寫的存儲過程可以用來對您的數(shù)據(jù)存取打包,并使之標準化,而且存儲過程實際上是存儲在數(shù)據(jù)庫中的。存儲過程可以帶參數(shù),也可不帶參數(shù),可以由數(shù)據(jù)庫程序調用或者由SQLServer查詢分析器手動執(zhí)行。 視圖(Views) 視圖是從一個或多個表中顯示特定的行和列的虛擬表。它們允許用戶可以不直接執(zhí)行構成查詢基礎的復雜連接而建立查詢。視圖不支持參數(shù)的使用。連接多個數(shù)據(jù)表的視圖不能用INSERT,UPDATE或DELETE語句來修改。視圖由事務處理SQL語句調用,也可用于SQLServer查詢分析器中運行的程序段。SQLServer視圖和SQL-92標準不支持視圖中的ORDERBY排序子句。如欲了解事務處理SQL,存儲過程和視圖的其他信息,請參閱SQLServer在線參考書。 Access查詢類型的SQLServer移植選擇與建議 一個SELECT語句可以存儲在事務處理SQL文件、存儲過程或是視圖中。建立存儲過程是將數(shù)據(jù)庫應用開發(fā)與數(shù)據(jù)庫設計的物理實施分開的最佳方法。存儲過程可在一處創(chuàng)建而由應用程序調用。 如果存儲過程所基于的數(shù)據(jù)庫變化了,而存儲過程經(jīng)過仔細的修改以反應這些變化,則對存儲過程的調用將不會受到破壞。 交叉表(CROSSTAB) 交叉表經(jīng)常用于總結報表。 一個Access的交叉表可以通過SQL程序段、存儲過程或視圖中的事務處理SQL語句來執(zhí)行。每當發(fā)出一個查詢時,數(shù)據(jù)連接被重現(xiàn)執(zhí)行以確保最近的數(shù)據(jù)得到使用。 根據(jù)實際應用情況,比較合適的方法是將交叉表中的數(shù)據(jù)存儲為一個臨時表(參考下面的MAKETABLE),臨時表對資源的需求比較少,但是臨時表在建立的同時只提供對數(shù)據(jù)的一個快照(snapshot)。 創(chuàng)建表(MAKETABLE) Access中的“MAKETABLE”(創(chuàng)建表)可以通過事務處理SQL腳本程序或存儲過程中的事務處理SQL語言的建表語句“CREATETABLE”來執(zhí)行。語法如下所示: SELECT[ALL|DISTINCT] [{TOPinteger|TOPintegerPERCENT}[WITHTIES]] [INTOnew_table] [FROM{}[,…n]] [WHERE] [GROUPBY[ALL]group_by_expression[,…n] [WITH{CUBE|ROLLUP}] CREATETABLEmytable(lowint,highint) UPDATE(修改) UPDATE語句可以存儲在事務_SQL腳本程序中,然而比較好地執(zhí)行UPDATE語句的方法是創(chuàng)建一個存儲過程。 APPEND(添加) ALLEND語句可以存儲在事務_SQL腳本程序中,然而比較好地執(zhí)行APPEND語句的方法是創(chuàng)建一個存儲過程。 移植MicrosoftAccess的查詢到存儲過程和視圖 每個Access查詢都必須用以下的一系列語句替換: CREATEPROCEDUREAS GO CREATEVIEWAS GO 對每個Access查詢應執(zhí)行: 打開Access,然后在SQLServer中,打開SQLServer查詢分析器。 在Access的數(shù)據(jù)庫窗口中點擊“Queries”tab鍵,然后點擊“Design”按鈕。 在“View”菜單上點擊“SQL”按鈕。 將整個查詢粘貼到SQLServer查詢分析器中。 測試語法,保存事務處理SQL語句以備后用,或者在數(shù)據(jù)庫中執(zhí)行這些語句。您可以選擇將事務處理SQL語句保存到一段腳本程序中。 移植MicrosoftAccess查詢到事務處理SQL語句 大部分的Access查詢應該轉換成存儲過程和視圖。然而,有一些應用程序開發(fā)者不太常用的語句可以存儲為事務處理SQL腳本,一種以sql為文件擴展名的文本文件。這些文件可以在SQLServer查詢分析器中運行。 如果您打算將一些Access查詢轉換為sql文件的話,可以考慮根據(jù)它們使用的方式有區(qū)別地將這些事務處理SQL語句分別放在幾個腳本程序中。例如,您可以將必須以同樣頻率運行的事務處理SQL語句歸類到同一個腳本中。另一個腳本中則應包含所有只在某些條件下運行的事務處理SQL語句。此外,必須以一定順序執(zhí)行的事務處理SQL語句應當歸類到一個不連續(xù)的腳本中。 將Access語句轉移到事務處理SQL文件 將語句拷貝到SQLServer查詢分析器中 使用藍色的多選項圖標分析語句 在適當時候執(zhí)行該語句 要執(zhí)行Access中的創(chuàng)建表(MAKETABLE)的查詢任務的開發(fā)者在SQLServer中有幾種選擇。開發(fā)者可創(chuàng)建下列對象之一: 一個視圖 視圖具有動態(tài)的虛擬表的效果,可提供最近的信息。這是一個輸入/輸出強化器,因為每當發(fā)出一個查詢時它都要求對數(shù)據(jù)表重現(xiàn)建立連接。 一個臨時表 臨時表為已連接的用戶會話建立一個快照。您可以建立局部的或全局的臨時表。局部臨時表只在當前會話中可見,而全局臨時表則在所有會話都是可見的。在局部臨時表的名字前加上單個數(shù)字的前綴((#table_name)),而在全局臨時表的名字前加上兩位數(shù)字的前綴(##table_name)。對臨時表的查詢執(zhí)行起來非常快,因為它們取得一個結果集的時候通常只用一個表,而不是將多個表動態(tài)地連接在一起來。 如欲了解臨時表的其他信息,請參閱SQLServer在線參考書。 SQLServer7.0中的數(shù)據(jù)轉換服務(DTS)允許您通過創(chuàng)建包來實現(xiàn)臨時表建立的標準化、自動化和進度安排。例如,當您移植Access2.0中的Northwind范例數(shù)據(jù)庫時,用于季度數(shù)據(jù)報表的交叉表可轉變?yōu)橐粋視圖或者一個可在規(guī)范基礎上建立臨時表的數(shù)據(jù)轉換。如欲了解關于DTS的其他信息,請參閱SQLServer在線參考書。 其他設計上的考慮 下面是當您將您的Access應用移植到SQLServer時必須考慮的一些其他問題: 使用參數(shù) 帶參數(shù)的SQLServer存儲過程需要一種不同于Access查詢的語法格式,例如: Access2.0格式: 查詢名:EmployeeSalesByCountry,inNWIND.mdb: PARAMETERS[BeginningDate]DateTime,[EndingDate]DateTime; SELECTOrders.[OrderID],[LastName]&","&[FirstName]ASSalesperson,Employees.Country,Orders.[ShippedDate],[OrderSubtotals].SubtotalAS[SaleAmount] FROMEmployeesINNERJOIN(OrdersINNERJOIN[OrderSubtotals]ONOrders.[OrderID]=[OrderSubtotals].[OrderID])ONEmployees.=Orders. WHERE(((Orders.[ShippedDate])Between[BeginningDate]And[EndingDate])) ORDERBY[LastName]&","&[FirstName],Employees.Country,Orders.[ShippedDate]; SQLServer7.0格式: CREATEPROCEDUREEMP_SALES_BY_COUNTRY @BeginningDatedatetime, @EndingDatedatetime AS SELECTOrders.[OrderID],[LastName]+","+[FirstName]ASSalesperson,Employees.Country, Orders.[ShippedDate],[OrderSubtotals].SubtotalAS[SaleAmount] FROMEmployeesINNERJOIN(OrdersINNERJ |
免責聲明:本站部分文章和圖片均來自用戶投稿和網(wǎng)絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業(yè)用途,如果損害了您的權利,請聯(lián)系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創(chuàng)業(yè)、互聯(lián)網(wǎng)等領域,為您提供最新最全的互聯(lián)網(wǎng)資訊,幫助站長轉型升級,為互聯(lián)網(wǎng)創(chuàng)業(yè)者提供更加優(yōu)質的創(chuàng)業(yè)信息和品牌營銷服務,與站長一起進步!讓互聯(lián)網(wǎng)創(chuàng)業(yè)者不再孤獨!
掃一掃,關注站長網(wǎng)微信