直播中
簡介
隨著用戶對于企業(yè)級高性能數(shù)據(jù)庫的需求的增長,用戶時常要從Microsoft Access Jet引擎的文件-服務器環(huán)境下轉換到
Microsoft SQL Server的客戶-服務器環(huán)境。Microsoft Office 2000中的Access 2000 Upsizing Wizard可實現(xiàn)將數(shù)據(jù)表和
查詢轉移到SQL Server 7.0中。如果您用的是Access的較早的版本,您可以先將它升級為Access 2000,然后再使用其中的
Upsizing Wizard,從而將您的應用移植到SQL Server中。
如果您并不太愿意采用Access 2000 和Upsizing Wizard來實現(xiàn)移植,本文可以作為將Access 2000移植到SQL Server的一
個指南。轉移一個Access上的應用首先需要將數(shù)據(jù)轉移到SQL Server,然后將查詢轉移進數(shù)據(jù)庫,或是轉移為SQL文件以備
稍后執(zhí)行。最后要采取的步驟是移植應用程序。
數(shù)據(jù)庫移植中用到的SQL Server 工具
SQL Server管理器(SQL Server Enterprise Manager)
SQL Server管理器 允許對SQL Server以及SQL Server中的對象進行企業(yè)級的配置和管理。SQL Server管理器提供一個強有
力的scheduling引擎,高度的容錯力和一個嵌入式的復制管理界面。使用SQL Server管理器可以實現(xiàn)以下功能:
管理連接和用戶許可
創(chuàng)建腳本程序
管理SQL Server對象的備份
備份數(shù)據(jù)和事務處理日志
管理表、視圖、存儲過程、觸發(fā)器、索引、規(guī)則、默認值以及用戶定義的數(shù)據(jù)類型
建立全文本索引、數(shù)據(jù)庫圖表和數(shù)據(jù)庫維護計劃
輸入和輸出數(shù)據(jù)
轉換數(shù)據(jù)
執(zhí)行各種網(wǎng)絡管理任務
在以Microsoft Windows NT為操作系統(tǒng)的計算機中,SQL Server Manager由SQL Server Setup進行安裝,并被默認為服務
器組件,而在運行著Windows NT 和Microsoft Windows 95的機器上,它將被默認為客戶方組件。您將從SQL Server
Manager的圖形用戶界面中啟動數(shù)據(jù)轉移服務(DTS,Data Transformation Services)。
數(shù)據(jù)轉移服務(Data Transformation Services ,DTS)
數(shù)據(jù)轉移服務允許您在多種異構數(shù)據(jù)源之間輸入和輸出數(shù)據(jù),這些數(shù)據(jù)源采用基于數(shù)據(jù)庫的OLE體系結構;或在使用SQL
Server 7.0的多個計算機之間轉移數(shù)據(jù)庫和數(shù)據(jù)庫對象;您還可以通過運用數(shù)據(jù)轉移服務,更便捷地在一個在線事務處理
系統(tǒng)(OLTP)中建立數(shù)據(jù)倉庫和數(shù)據(jù)中心。
DTS Wizard允許您交互地創(chuàng)建DTS包,通過OLE DB和ODBC來輸入、輸出、驗證和轉移數(shù)據(jù)。DTS Wizard還允許您在關系型數(shù)
據(jù)庫之間拷貝圖解(schema)和數(shù)據(jù)。
SQL Server 查詢分析器(Query Analyzer)
SQL Server 查詢分析器是一種圖形化的查詢工具,通過它您可以分析一個查詢,同時執(zhí)行多個查詢,查看數(shù)據(jù)和獲取索引
建議。SQL Server 查詢分析器提供了showplan選項,可用來顯示SQL Server查詢優(yōu)化器所選擇的數(shù)據(jù)提取方法。
SQL Server Profiler
SQL Server Profiler可以實時地捕獲數(shù)據(jù)庫服務器活動的連續(xù)記錄。SQL Server Profiler允許您監(jiān)控SQL Server產生的
事件,過濾基于用戶指定標準的事件,或將操作步驟輸出到屏幕、文件或數(shù)據(jù)表。運用SQL Server Profiler,您可以重新
執(zhí)行所捕獲的上一次操作。這種工具可以幫助應用程序開發(fā)者識別那些可能會降低應用程序性能的事務處理。在將一個基
于文件體系結構的應用程序移植到客戶/服務器結構中時該特性是很有用的,因為它的最后一步包括對面向新的客戶/服務
器環(huán)境的應用程序進行優(yōu)化。
轉移表和數(shù)據(jù)
使用DTS Wizard將您的Access數(shù)據(jù)轉移到SQL Server,可采取以下步驟:
在 SQL Server Manager(Enterprise Manager)的工具菜單中,鼠標指向“Data Transformation Services”, 然后點擊
“Import Data.”
在“選擇數(shù)據(jù)源”( Choose a Data Source)的對話窗口中,選擇Microsoft Access為數(shù)據(jù)源,然后輸入您的.mdb文件
名(mdb為文件擴展名)或者選擇瀏覽文件。
在“選擇數(shù)據(jù)目標”(Choose a Destination)的對話窗口中,選擇“Microsoft OLE DB Provider for SQL Server”,
再選擇好數(shù)據(jù)庫服務器,然后點擊所需的認證模式。
在“指定表備份或查詢”( Specify Table Copy or Query)的對話窗口中,點擊“拷貝表”(Copy tables)。
在“選擇數(shù)據(jù)源”的對話窗口中,點擊“選擇所有項”( Select All)。
移植Microsoft Access查詢
您可以將Access的查詢以下面的格式之一轉移至SQL Server中:
事務處理SQL腳本程序(Transact-SQL scripts )
事務處理SQL語句通常是由數(shù)據(jù)庫程序調用的,但是您也可以使用SQL Server 7.0中包含的SQL Server 查詢分析器直接運
行它們。SQL Server 查詢分析器可幫助開發(fā)者測試事務處理SQL語句,或運行那些執(zhí)行查詢處理、數(shù)據(jù)操作(插入,修
改,刪除)和數(shù)據(jù)定義(創(chuàng)建表)的事務處理SQL語句。
存儲過程(Stored procedures )
開發(fā)者可以將大部分產生自Access查詢(查找,插入,修改,刪除)的事務處理SQL語句轉移至存儲過程。用事務處理SQL
語句書寫的存儲過程可以用來對您的數(shù)據(jù)存取打包,并使之標準化,而且存儲過程實際上是存儲在數(shù)據(jù)庫中的。存儲過程
可以帶參數(shù),也可不帶參數(shù),可以由數(shù)據(jù)庫程序調用或者由SQL Server查詢分析器手動執(zhí)行。
視圖(Views )
視圖是從一個或多個表中顯示特定的行和列的虛擬表。它們允許用戶可以不直接執(zhí)行構成查詢基礎的復雜連接而建立查
詢。視圖不支持參數(shù)的使用。連接多個數(shù)據(jù)表的視圖不能用INSERT, UPDATE或 DELETE語句來修改。視圖由事務處理SQL語
句調用,也可用于SQL Server查詢分析器中運行的程序段。SQL Server視圖和SQL-92標準不支持視圖中的ORDER BY排序子
句。如欲了解事務處理SQL,存儲過程和視圖的其他信息,請參閱SQL Server 在線參考書。
Access查詢類型的SQL Server移植選擇與建議
一個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ù)存儲為一個臨時表(參考下面的MAKE TABLE),臨時表對資源的
需求比較少,但是臨時表在建立的同時只提供對數(shù)據(jù)的一個快照(snapshot)。
創(chuàng)建表(MAKE TABLE)
Access中的“MAKE TABLE”( 創(chuàng)建表)可以通過事務處理SQL腳本程序或存儲過程中的事務處理SQL語言的建表語句
“CREATE TABLE”來執(zhí)行。語法如下所示:
SELECT [ ALL | DISTINCT ]
[ {TOP integer | TOP integer PERCENT} [ WITH TIES] ]
<select_list>
[ INTO new_table ]
[ FROM {<table_source>} [,…n] ]
[ WHERE <search_condition> ]
[ GROUP BY [ALL] group_by_expression [,…n]
[ WITH { CUBE | ROLLUP } ]
CREATE TABLE mytable (low int, high int)
UPDATE(修改)
UPDATE語句可以存儲在事務_SQL腳本程序中,然而比較好地執(zhí)行UPDATE語句的方法是創(chuàng)建一個存儲過程。
APPEND(添加)
ALLEND語句可以存儲在事務_SQL腳本程序中,然而比較好地執(zhí)行APPEND語句的方法是創(chuàng)建一個存儲過程。
移植Microsoft Access的查詢到存儲過程和視圖
每個Access查詢都必須用以下的一系列語句替換:
CREATE PROCEDURE <NAME_HERE> AS
< SELECT, UPDATE, DELETE, INSERT, CREATE TABLE statement from Microsoft Access >
GO
CREATE VIEW <NAME_HERE> AS
<Place (SELECT only, with no parameters) Microsoft Access Query>
GO
對每個Access查詢應執(zhí)行:
打開Access,然后在SQL Server中,打開SQL Server查詢分析器。
在Access的數(shù)據(jù)庫窗口中點擊“Queries”tab鍵,然后點擊“Design”按鈕。
在“View”菜單上點擊“SQL”按鈕。
將整個查詢粘貼到SQL Server查詢分析器中。
測試語法,保存事務處理SQL語句以備后用,或者在數(shù)據(jù)庫中執(zhí)行這些語句。您可以選擇將事務處理SQL語句保存到一段腳
本程序中。
移植Microsoft Access查詢到事務處理SQL語句
大部分的Access查詢應該轉換成存儲過程和視圖。然而,有一些應用程序開發(fā)者不太常用的語句可以存儲為事務處理SQL腳
本,一種以sql為文件擴展名的文本文件。 這些文件可以在SQL Server查詢分析器中運行。
如果您打算將一些Access查詢轉換為sql文件的話,可以考慮根據(jù)它們使用的方式有區(qū)別地將這些事務處理SQL語句分別放
在幾個腳本程序中。例如,您可以將必須以同樣頻率運行的事務處理SQL語句歸類到同一個腳本中。另一個腳本中則應包含
所有只在某些條件下運行的事務處理SQL語句。此外,必須以一定順序執(zhí)行的事務處理SQL語句應當歸類到一個不連續(xù)的腳
本中。
將Access語句轉移到事務處理SQL 文件
將語句拷貝到SQL Server查詢分析器中
使用藍色的多選項圖標分析語句
在適當時候執(zhí)行該語句
要執(zhí)行Access中的創(chuàng)建表(MAKE TABLE)的查詢任務的開發(fā)者在SQL Server中有幾種選擇。開發(fā)者可創(chuàng)建下列對象之一:
一個視圖
視圖具有動態(tài)的虛擬表的效果,可提供最近的信息。這是一個輸入/輸出強化器,因為每當發(fā)出一個查詢時它都要求對數(shù)據(jù)
表重現(xiàn)建立連接。
一個臨時表
臨時表為已連接的用戶會話建立一個快照。您可以建立局部的或全局的臨時表。局部臨時表只在當前會話中可見,而全局
臨時表則在所有會話都是可見的。在局部臨時表的名字前加上單個數(shù)字的前綴((#table_name)),而在全局臨時表的名字
前加上兩位數(shù)字的前綴(##table_name)。對臨時表的查詢執(zhí)行起來非???,因為它們取得一個結果集的時候通常只用一個
表,而不是將多個表動態(tài)地連接在一起來。
如欲了解臨時表的其他信息,請參閱SQL Server在線參考書。
SQL Server 7.0中的數(shù)據(jù)轉換服務(DTS)允許您通過創(chuàng)建包來實現(xiàn)臨時表建立的標準化、自動化和進度安排。例如,當您
移植Access 2.0中的Northwind 范例數(shù)據(jù)庫時,用于季度數(shù)據(jù)報表的交叉表可轉變?yōu)橐粋€視圖或者一個可在規(guī)范基礎上建
立臨時表的數(shù)據(jù)轉換。如欲了解關于DTS的其他信息,請參閱SQL Server在線參考書。
其他設計上的考慮
下面是當您將您的Access應用移植到SQL Server時必須考慮的一些其他問題:
使用參數(shù)
帶參數(shù)的SQL Server存儲過程需要一種不同于Access查詢的語法格式,例如:
Access 2.0格式:
查詢名:Employee Sales By Country, in NWIND.mdb:
PARAMETERS [Beginning Date] DateTime, [Ending Date] DateTime;
SELECT Orders.[Order ID], [Last Name] & ", " & [First Name] AS Salesperson, Employees.Country, Orders.
[Shipped Date], [Order Subtotals].Subtotal AS [Sale Amount]
FROM Employees INNER JOIN (Orders INNER JOIN [Order Subtotals] ON Orders.[Order ID] = [Order Subtotals].
[Order ID]) ON Employees.[Employee ID] = Orders.[Employee ID]
WHERE (((Orders.[Shipped Date]) Between [Beginning Date] And [Ending Date]))
ORDER BY [Last Name] & ", " & [First Name], Employees.Country, Orders.[Shipped Date];
SQL Server 7.0格式:
CREATE PROCEDURE EMP_SALES_BY_COUNTRY
@BeginningDate datetime,
@EndingDate datetime
AS
SELECT Orders.[Order ID], [Last Name] + ", " + [First Name] AS Salesperson, Employees.Country,
Orders.[Shipped Date], [Order Subtotals].Subtotal AS [Sale Amount]
FROM Employees INNER JOIN (Orders INNER J