[摘 要]本文通過一個具體例子,介紹了利用2000 SQL Server中的DTS工具實現電算化系統數據庫遷移方法及注意事項;對會計電算化系統升級具有實踐指導作用。
[關鍵詞] 數據庫遷移;會計電算化;DTS工具
[中圖分類號] F232;TP331.138SQ[文獻標識碼]A[文章編號]1673-0194(2006)08-0056-02
1引言
工作中遇到這樣一個問題,有一個用delphi語言、Access 97數據庫開發的會計電算化系統,數據庫名為date.mdb,內有90多個數據表及70多個查詢,用戶因業務發展需要,提出升級系統。經過分析,只要把數據庫遷移到2000 SQL Server數據庫,應用程序稍作修改就能達到用戶要求。通過多次實踐驗證,應用SQL 的DTS工具,成功地實現了這一會計電算化系統升級。
2數據庫表、數據遷移及表的修改
2.1DTS工具實現表、數據遷移過程
(1)新建一個空的SQL數據庫
“程序”——“Microsoft SQL Servers”——“控制臺根目錄”——“SQL Server組”——“數據庫”——“新建一數據庫”。如新數據庫名字為newdate。
(2)“程序”——“Microsoft SQL Servers”——“導入和導出數據”——“下一步”,進入DTS工具操作界面。
(3)選擇數據源, 在“數據源”選擇欄中選項擇“Driver do Microsoft Access[*.mdb]”。
(4)創建數據源,單選“用戶/系統(DSN)”,點擊其后的“新建——創建新數據源面版”——“選擇系統數據源(只用于當前機器)”——“選擇 Driver to Microsoft Access(*.mdb)”——“下一步”——“完成”。
(5)選擇要導入的Access數據庫地址,在數據源名說明后,隨便于輸入字符,在數據庫選擇中,單擊“選擇”項,選擇你的Access數據庫,如:在系統數據庫選項,單選“無”,然后確定,返回到向導界面,然后進入“下一步”。
(6)選擇目的數據庫:目的選擇,“用于SQL Server的Microsoft OLE DB提供的程序”, 服務器選用:“[local]”,使用Windows身份驗證,數據庫:選擇事先建好的空數據庫newdate,“下一步”。
(7)指定表復制或查詢:選擇從源數據庫復制表和視圖——“下一步”——“全選”——“下一步”。
2.2遷移后對目標數據庫的修改
Access數據庫date遷升到SQL Servers 數據后,通過比較分析轉換前后的數據庫發現,目標數據庫表字段類型(如圖1所示)及數據發生了某些變化,還需要人工修改。

圖1 轉換前后數據庫表字段
(1)在Access表中的i_id字段“自動編號”類型遷移到SQL數據庫后變成了“int”數據類型,在SQL數據庫中沒有“自動編號”字段類型,必須手工修改這些字段,并將其“標示”選擇“是”,種子為“1”,增量為“1”。
(2)igrade字段由“數字”類型變為“tinyint”,所有的數字類型需要增加長度,用bigint;
(3)原來屬性為“是/否”的字段將被轉換成非空的“bit”,這時候你必須修改成自己想要的屬性了。
(4) 所有的默認值都丟失了,主要是數字類型和日期類型。
(5)與日期有關的字段,變為datetime型,不需要修改。
3數據庫查詢的遷移
源于Access查詢(SELECT、INSERT、UPDATE 和 DELETE)的Transact-SQL語句可轉換為SQL的存儲過程, 每個Access查詢都必須用以下的一系列語句替換: CREATE PROCEDURE
INSERT INTO question ( AccID, QuestionID, QuestionMS, Result )
SELECT (AccID +1) AS AccID1, QuestionID, QuestionMS, Result
FROM question
WHERE AccID=4 and questionid=11;
可通過下述方法方便移入到SQL的newdate數據庫存儲過程中:
(1) 在Access中打開date數據庫,進入追加查詢設計器,復制Transact-SQL語句。
(2) 在SQL Server 企業管理器中打開目標數據庫newdate,創建一空的存儲過程,把剛復制的Transact-SQL語句粘貼進來,稍作修改變為:
PROCEDURE reserch
(accID [int],@questioned [varchar](50),@questionMS,@result [text])
AS INSERT INTO question (@accID,@questionID,@questionMS,@result)
VALUES (@accID,@questionID,@questionMS,@result)
GOexec reserch
GOSELECT (AccID +1) AS AccID1, QuestionID, QuestionMS, Result
FROM question
WHERE AccID=4 and questionid=11;
(3)進行語法檢查通過,通過查詢分析器驗證正確即可。
4轉換后其他要修改的地方
(1)所有now( ),time( ),date( )要改成getdate( );
(2)所有datediff(''d'', time1, time2)要改成datediff(day, time1, time2),備注類型要通過cast(column as varchar)來使用;
(3)is1(rowname)要改成rowname = 1;
(4)cursortype要改成1,也就是打開數據庫時要給出第一個數字參數為1,否則記錄可能顯示不完整;
(5)is1(rowname)要改成rowname = 1 ;
(6)程序里如果有直接對整型變量的判斷,也需要進行顯示的轉換,如:
if rs(\"id\") = 0 then要變為:if clng(rs(\"id\")) = 0 then
數據庫遷移是會計電算過程中常遇到的事情,也是復雜的事情,遷升過程中數據的安全性、可靠性是非常重要的,因此數據庫遷升過程中,對數據庫中各語法規則,數據庫間不同之處要進行修改。數據庫遷升后,對電算化應用程序只要稍作修改就可以,但要在程序中的各個模塊都進行測試正確后,方可正式投入使用。
主要參考文獻
[1] 施伯樂,丁寶康,周傲英,田增平.數據庫系統教程[M].北京:高等教育出版社,1999.
[2] Roger S Pressman.軟件工程-實踐者的研究方法[M].北京:機械工業出版社,2002.
[3] Ray Rankins, Paul Jensen, Paul Bertucci.SQL Server 2000實用全書[M].北京:電子工業出版社,2002.