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

Access 遷移 SQL Server 完整避坑指南:22 項關鍵差異與修正腳本

     編輯:關於SqlServer

Access (Jet/ACE) 到 SQL Server (T-SQL) 遷移看似簡單,實則暗藏大量語法、型別、行為差異。本文彙整 22 項實戰踩坑點,附對照表與修正建議,助你一次遷移成功。

核心差異對照表

#項目AccessSQL Server修正建議
1自動編號AutoNumberIdentity(1,1)匯入後手動設定「識別規格」= 是,種子/遞增 = 1
2預設值遺失Default ValueDefault Constraint逐表補齊 ALTER TABLE ... ADD CONSTRAINT ... DEFAULT ...
3現在時間Now() / Date() / Time()GETDATE() / SYSDATETIME()全域搜尋替換
4日期差 (天)DateDiff('d', d1, d2)DATEDIFF(DAY, d1, d2)單位改大寫英文,移除引號
5日期差 (週)DateDiff('ww', d1, d2)DATEDIFF(WEEK, d1, d2)同上
6保留字衝突無限制眾多保留字欄位/表名加 [括號] 或改名
7時間參數化WHERE dt = #" & Now() & "#WHERE dt = @dt 參數化改用參數化查詢,防注入
8日期函數DateAdd/DateDiff/FormatDATEADD/DATEDIFF/FORMAT語法大寫,參數順序可能不同
9時間型別Date/Time (Double)SMALLDATETIME / DATETIME / DATETIME2建議統一 DATETIME2(3),範圍更大
10IsNull 判斷IsNull(field)field IS NULLT-SQL ISNULL() 是替換函數,非判斷
11游標類型預設即可ADO 需 CursorType=1 (adOpenKeyset)開啟 Recordset 時指定
12Memo/長文字MemoVARCHAR(MAX) / NVARCHAR(MAX)讀取時 CAST(col AS VARCHAR(MAX))
13布林值True/False (-1/0)BIT (1/0)應用層統一轉換
14DELETE 語法DELETE * FROM t WHERE ...DELETE FROM t WHERE ...移除星號
15VB 函數在 SQLCStr(), Format() 等可直接用不可用,需改 T-SQL 對應函數重寫邏輯或移至應用層
16時間字串格式#yyyy-mm-dd#'yyyy-mm-dd' (單引號)統一 ISO 8601 格式
17樂觀鎖衝突罕見常見 80040e38改用 UPDATE t SET col=val WHERE pk=@pk 明確更新
18整數除法\ 或 /僅 / (回傳浮點),整數除法用 / 後 FLOOR注意型別轉換
19主鍵缺失不強制更新需主鍵/唯一索引遷移後務必補建 PK
20Recordset 開啟模式預設rs.Open sql, conn, 3, 2 (adOpenStatic, adLockOptimistic)明確指定游標/鎖定類型

遷移工具與流程建議

  1. SQL Server Migration Assistant for Access (SSMA):官方免費工具,自動轉換結構、資料、查詢,支援評估報告
  2. 分階段驗證:結構 → 資料 → 查詢/表單/報表 → 應用程式
  3. 保留 Access 前端:連結資料表模式,逐步將邏輯下推至預存程序
  4. 效能基準:遷移前後跑核心報表/批次,比對執行計畫與耗時

關鍵心法

  • **型別嚴謹化**:Access 寬鬆,SQL Server 嚴格,善用 TRY_CAST/TRY_CONVERT 防轉換失敗
  • **邏輯下推**:將 VBA/查詢邏輯封裝為預存程序/函數,減少網路往返
  • **參數化一切**:杜絕字串拼接,防注入、利用計畫快取

按表逐項核對修正,配合 SSMA 工具輔助,Access 遷移 SQL Server 可控、可測、可交付。

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