程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Access數據庫 >> 關於Access數據庫 >> 將Access數據庫移植到SQLServer

將Access數據庫移植到SQLServer

編輯:關於Access數據庫
隨著用戶對於企業級高性能數據庫的需求的增長,用戶時常要從Microsoft Access Jet引擎的文件-服務器環境下轉換到Microsoft SQL Server的客戶-服務器環境。 Microsoft Office 2000中的Access 2000 Upsizing Wizard可實現將數據表和查詢轉移到SQL Server 7.0中。如果您用的是Access的較早的版本,您可以先將它升級為Access 2000,然後再使用其中的Upsizing Wizard,從而將您的應用移植到SQL Server中。 



如果您並不太願意采用Access 2000 和Upsizing Wizard來實現移植,本文可以作為將Access 2000移植到SQL Server的一個指南。轉移一個Access上的應用首先需要將數據轉移到SQL Server,然後將查詢轉移進數據庫,或是轉移為SQL文件以備稍後執行。最後要采取的步驟是移植應用程序。 

數據庫移植中用到的SQL Server 工具 

SQL Server管理器(SQL Server Enterprise Manager) 
SQL Server管理器 允許對SQL Server以及SQL Server中的對象進行企業級的配置和管理。SQL Server管理器提供一個強有力的scheduling引擎,高度的容錯力和一個嵌入式的復制管理界面。使用SQL Server管理器可以實現以下功能: 

管理連接和用戶許可 
創建腳本程序 
管理SQL Server對象的備份 
備份數據和事務處理日志 
管理表、視圖、存儲過程、觸發器、索引、規則、默認值以及用戶定義的數據類型 
建立全文本索引、數據庫圖表和數據庫維護計劃 
輸入和輸出數據 
轉換數據 
執行各種網絡管理任務 

在以Microsoft Windows NT為操作系統的計算機中,SQL Server Manager由SQL Server Setup進行安裝,並被默認為服務器組件,而在運行著Windows NT 和Microsoft Windows 95的機器上,它將被默認為客戶方組件。您將從SQL Server Manager的圖形用戶界面中啟動數據轉移服務(DTS,Data Transformation Services)。 


數據轉移服務(Data Transformation Services ,DTS) 
數據轉移服務允許您在多種異構數據源之間輸入和輸出數據,這些數據源采用基於數據庫的OLE體系結構;或在使用SQL Server 7.0的多個計算機之間轉移數據庫和數據庫對象;您還可以通過運用數據轉移服務,更便捷地在一個在線事務處理系統(OLTP)中建立數據倉庫和數據中心。 


DTS Wizard允許您交互地創建DTS包,通過OLE DB和ODBC來輸入、輸出、驗證和轉移數據。DTS Wizard還允許您在關系型數據庫之間拷貝圖解(schema)和數據。 

SQL Server 查詢分析器(Query Analyzer) 
SQL Server 查詢分析器是一種圖形化的查詢工具,通過它您可以分析一個查詢,同時執行多個查詢,查看數據和獲取索引建議。SQL Server 查詢分析器提供了showplan選項,可用來顯示SQL Server查詢優化器所選擇的數據提取方法。 

SQL Server Profiler 
SQL Server Profiler可以實時地捕獲數據庫服務器活動的連續記錄。SQL Server Profiler允許您監控SQL Server產生的事件,過濾基於用戶指定標准的事件,或將操作步驟輸出到屏幕、文件或數據表。運用SQL Server Profiler,您可以重新執行所捕獲的上一次操作。這種工具可以幫助應用程序開發者識別那些可能會降低應用程序性能的事務處理。在將一個基於文件體系結構的應用程序移植到客戶/服務器結構中時該特性是很有用的,因為它的最後一步包括對面向新的客戶/服務器環境的應用程序進行優化。 


轉移表和數據 
使用DTS Wizard將您的Access數據轉移到SQL Server,可采取以下步驟: 

在 SQL Server Manager(Enterprise Manager)的工具菜單中,鼠標指向“Data Transformation Services”, 然後點擊“Import Data.” 
在“選擇數據源”( Choose a Data Source)的對話窗口中,選擇Microsoft Access為數據源,然後輸入您的.mdb文件名(mdb為文件擴展名)或者選擇浏覽文件。 
在“選擇數據目標”(Choose a Destination)的對話窗口中,選擇“Microsoft OLE DB Provider for SQL Server”,再選擇好數據庫服務器,然後點擊所需的認證模式。 
在“指定表備份或查詢”( Specify Table Copy or Query)的對話窗口中,點擊“拷貝表”(Copy tables)。 
在“選擇數據源”的對話窗口中,點擊“選擇所有項”( Select All)。 


移植Microsoft Access查詢 
您可以將Access的查詢以下面的格式之一轉移至SQL Server中: 

事務處理SQL腳本程序(Transact-SQL s cripts ) 
事務處理SQL語句通常是由數據庫程序調用的,但是您也可以使用SQL Server 7.0中包含的SQL Server 查詢分析器直接運行它們。SQL Server 查詢分析器可幫助開發者測試事務處理SQL語句,或運行那些執行查詢處理、數據操作(插入,修改,刪除)和數據定義(創建表)的事務處理SQL語句。 


存儲過程(Stored procedures ) 
開發者可以將大部分產生自Access查詢(查找,插入,修改,刪除)的事務處理SQL語句轉移至存儲過程。用事務處理SQL語句書寫的存儲過程可以用來對您的數據存取打包,並使之標准化,而且存儲過程實際上是存儲在數據庫中的。存儲過程可以帶參數,也可不帶參數,可以由數據庫程序調用或者由SQL Server查詢分析器手動執行。 

視圖(VIEws ) 
視圖是從一個或多個表中顯示特定的行和列的虛擬表。它們允許用戶可以不直接執行構成查詢基礎的復雜連接而建立查詢。視圖不支持參數的使用。連接多個數據表的視圖不能用INSERT, UPDATE或 DELETE語句來修改。視圖由事務處理SQL語句調用,也可用於SQL Server查詢分析器中運行的程序段。SQL Server視圖和SQL-92標准不支持視圖中的ORDER BY排序子句。如欲了解事務處理SQL,存儲過程和視圖的其他信息,請參閱SQL Server 在線參考書。 


Access查詢類型的SQL Server移植選擇與建議 
一個SELECT語句可以存儲在事務處理SQL文件、存儲過程或是視圖中。建立存儲過程是將數據庫應用開發與數據庫設計的物理實施分開的最佳方法。存儲過程可在一處創建而由應用程序調用。 
如果存儲過程所基於的數據庫變化了,而存儲過程經過仔細的修改以反應這些變化,則對存儲過程的調用將不會受到破壞。 

交叉表(CROSSTAB) 
交叉表經常用於總結報表。 

一個Access的交叉表可以通過SQL程序段、存儲過程或視圖中的事務處理SQL語句來執行。每當發出一個查詢時,數據連接被重現執行以確保最近的數據得到使用。 

根據實際應用情況,比較合適的方法是將交叉表中的數據存儲為一個臨時表(參考下面的MAKE TABLE),臨時表對資源的需求比較少,但是臨時表在建立的同時只提供對數據的一個快照(snapshot)。 

創建表(MAKE TABLE) 
Access中的“MAKE TABLE”( 創建表)可以通過事務處理SQL腳本程序或存儲過程中的事務處理SQL語言的建表語句“CREATE TABLE”來執行。語法如下所示: 
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腳本程序中,然而比較好地執行UPDATE語句的方法是創建一個存儲過程。 

APPEND(添加) 
ALLEND語句可以存儲在事務_SQL腳本程序中,然而比較好地執行APPEND語句的方法是創建一個存儲過程。 


移植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查詢應執行: 

打開Access,然後在SQL Server中,打開SQL Server查詢分析器。 
在Access的數據庫窗口中點擊“QuerIEs”tab鍵,然後點擊“Design”按鈕。 
在“VIEw”菜單上點擊“SQL”按鈕。 
將整個查詢粘貼到SQL Server查詢分析器中。 
測試語法,保存事務處理SQL語句以備後用,或者在數據庫中執行這些語句。您可以選擇將事務處理SQL語句保存到一段腳本程序中。 

移植Microsoft Access查詢到事務處理SQL語句 

大部分的Access查詢應該轉換成存儲過程和視圖。然而,有一些應用程序開發者不太常用的語句可以存儲為事務處理SQL腳本,一種以sql為文件擴展名的文本文件。 這些文件可以在SQL Server查詢分析器中運行。 

如果您打算將一些Access查詢轉換為sql文件的話,可以考慮根據它們使用的方式有區別地將這些事務處理SQL語句分別放在幾個腳本程序中。例如,您可以將必須以同樣頻率運行的事務處理SQL語句歸類到同一個腳本中。另一個腳本中則應包含所有只在某些條件下運行的事務處理SQL語句。此外,必須以一定順序執行的事務處理SQL語句應當歸類到一個不連續的腳本中。 

將Access語句轉移到事務處理SQL 文件 

將語句拷貝到SQL Server查詢分析器中 
使用藍色的多選項圖標分析語句 
在適當時候執行該語句 

要執行Access中的創建表(MAKE TABLE)的查詢任務的開發者在SQL Server中有幾種選擇。開發者可創建下列對象之一: 

一個視圖 
視圖具有動態的虛擬表的效果,可提供最近的信息。這是一個輸入/輸出強化器,因為每當發出一個查詢時它都要求對數據表重現建立連接。 

一個臨時表 
臨時表為已連接的用戶會話建立一個快照。您可以建立局部的或全局的臨時表。局部臨時表只在當前會話中可見,而全局臨時表則在所有會話都是可見的。在局部臨時表的名字前加上單個數字的前綴((#table_name)),而在全局臨時表的名字前加上兩位數字的前綴(##table_name)。對臨時表的查詢執行起來非常快,因為它們取得一個結果集的時候通常只用一個表,而不是將多個表動態地連接在一起來。 
如欲了解臨時表的其他信息,請參閱SQL Server在線參考書。 

SQL Server 7.0中的數據轉換服務(DTS)允許您通過創建包來實現臨時表建立的標准化、自動化和進度安排。例如,當您移植Access 2.0中的Northwind 范例數據庫時,用於季度數據報表的交叉表可轉變為一個視圖或者一個可在規范基礎上建立臨時表的數據轉換。如欲了解關於DTS的其他信息,請參閱SQL Server在線參考書。 

其他設計上的考慮 
下面是當您將您的Access應用移植到SQL Server時必須考慮的一些其他問題: 

使用參數 
帶參數的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. = Orders. 
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
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved