首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

Access 遷移 SQL Server 2000 完整實戰指南:DTS 導入、資料類型映射與遷移後調優

     編輯:關於SqlServer

許多中小企業從 Access 起家,隨著業務增長需遷移至 SQL Server。本文詳述 Access 2000 到 SQL Server 2000 的標準遷移流程,重點解析資料類型映射陷阱、主鍵身分識別重建、日期函數差異處理等核心難點,並提供遷移後的效能優化清單。

遷移前置作業:環境準備與風險控管

必要條件檢查清單

  • ✅ Access 2000 / SQL Server 2000 版本確認(其他版本參考原理自行調整)
  • ✅ 完整備份 Access .mdb 檔案(不可逆操作前的生命線)
  • ✅ 確認 ODBC 驅動程式:Driver do Microsoft Access (*.mdb) 已安裝
  • ✅ 目標 SQL Server 具備足夠磁碟空間(建議預留 3 倍 .mdb 大小)
  • ✅ 遷移窗口期規劃:業務低峰期,通知相關人員暫停寫入操作

標準遷移流程:DTS 導入精靈逐步操作

步驟 1:建立 ODBC 系統資料來源名稱 (DSN)


控制台 → 管理工具 → 資料來源 (ODBC) → 系統 DSN 標籤 → 新增
→ 選擇 "Driver do Microsoft Access (*.mdb)"
→ 資料來源名稱: Access_Source(自定義)
→ 選擇資料庫: 瀏覽定位到 .mdb 檔案
→ 確定完成

步驟 2:SQL 企業管理器建立目標資料庫


企業管理器 → 右鍵「資料庫」 → 新增資料庫
名稱: TargetDB(與 Access 檔名對應)
資料檔: 100MB 起,自動增長 10%
記錄檔: 50MB 起,自動增長 10%
復原模式: 簡單(遷移期間減少記錄增長)

步驟 3:啟動 DTS 導入精靈

  1. 右鍵目標資料庫 → 所有工作 → 導入資料
  2. 資料來源: 選擇剛建立的 Access_Source DSN
  3. 目的地: 選擇本機 SQL Server,驗證模式建議 SQL Server 驗證 (sa),目標資料庫選 TargetDB
  4. 複製方式: 選擇「從資料來源複製資料表與檢視表」
  5. 選擇資料表: 全選(或按業務模組分批)
  6. 執行: 立即執行 → 完成

核心難點:資料類型映射與遷移後必改項目

DTS 導入僅完成結構與資料的物理搬移,邏輯層面的語意差異必須人工修正:

Access 類型DTS 預設映射問題描述必須手工修正為
自動編號 (長整數)INT NOT NULL遺失 IDENTITY 屬性INT IDENTITY(1,1) PRIMARY KEY
是/否 (Yes/No)BIT NOT NULL無法直接用於 CHECK 約束、預設值處理異常BIT NULL DEFAULT 0 或 CHAR(1) CHECK IN ('Y','N')
日期/時間DATETIME日期函數語法差異大保留 DATETIME,但需重寫所有日期運算
備忘錄TEXTTEXT 類型即將淘汰,功能受限NVARCHAR(MAX) (SQL 2005+) / NTEXT
OLE 物件IMAGE二進制大物件處理效能差VARBINARY(MAX) 或檔案系統存儲+路徑引用

修正腳本範例:批次重建 IDENTITY 主鍵


-- 針對所有無主鍵且有 INT NOT NULL 欄位的表
DECLARE @sql NVARCHAR(MAX) = '';
SELECT @sql += '
ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']
DROP COLUMN [' + COLUMN_NAME + '];
ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']
ADD [' + COLUMN_NAME + '] INT IDENTITY(1,1) PRIMARY KEY;'
FROM INFORMATION_SCHEMA.COLUMNS c
JOIN INFORMATION_SCHEMA.TABLES t ON c.TABLE_NAME = t.TABLE_NAME
WHERE c.DATA_TYPE = 'int' AND c.IS_NULLABLE = 'NO'
AND t.TABLE_TYPE = 'BASE TABLE'
AND NOT EXISTS (
  SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
  WHERE tc.TABLE_NAME = t.TABLE_NAME AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
);
EXEC sp_executesql @sql;

日期函數遷移對照表(開發必備)

Access 函數SQL Server 對應寫法範例
Date()GETDATE() / CAST(GETDATE() AS DATE)當前日期
Now()GETDATE()當前日期時間
DateAdd("d", 30, [DateField])DATEADD(day, 30, DateField)加 30 天
DateDiff("d", [StartDate], [EndDate])DATEDIFF(day, StartDate, EndDate)天數差
Format([DateField], "yyyy-mm-dd")CONVERT(VARCHAR(10), DateField, 120)格式化輸出
Year()/Month()/Day()YEAR()/MONTH()/DAY()同名函數
IIf(IsNull([DateField]), ..., ...)CASE WHEN DateField IS NULL THEN ... ELSE ... END條件判斷

遷移後驗證與優化清單

  1. 資料完整性核對:核心表行數對比、關鍵欄位 SUM/COUNT 對比、主鍵/外鍵約束驗證
  2. 統計資訊更新:EXEC sp_updatestats; 確保查詢優化器有最新統計資訊
  3. 索引重建:DBCC DBREINDEX(@DBName, '', 90); 消除遷移產生的碎片
  4. 修改復原模式:生產環境改為 完整復原模式 + 定期記錄備份
  5. 應用程式連接字串更新:Provider=SQLOLEDB; Data Source=...; Initial Catalog=TargetDB; ...
  6. 效能基準測試:關鍵查詢執行時間對比,識別需調優的前 10 條 SQL

遷移專家建議:採用「分批遷移、雙寫驗證、灰度切換」策略。先遷移唯讀查詢類應用,驗證 1 週無誤後,再遷移核心交易系統。保留 Access 系統作為回滾方案至少 1 個月。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved