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

Access 遷移 SQL Server 實戰避坑指南:自動編號、日期型別、SQL 差異、函數相容性

     編輯:關於SqlServer

遷移核心差異對照表

項目Access (Jet/ACE)SQL Server (T-SQL)遷移對策
自動編號 AutoNumber (長整數/複寫 ID) INT IDENTITY(1,1) / UNIQUEIDENTIFIER ROWGUIDCOL 建表腳本明確加上 IDENTITY;匯入後用 DBCC CHECKIDENT 重置種子
日期型別 Date/Time (雙精度浮點,範圍 #100/1/1#~#9999/12/31#) SMALLDATETIME (1900-2079) / DATETIME (1753-9999) / DATETIME2 (0001-9999) 統一用 DATETIME 或 DATETIME2,避免 SMALLDATETIME 範圍不足導致匯入失敗
刪除語法 DELETE * FROM table WHERE ... DELETE FROM table WHERE ... (無星號) 批次搜尋替換 DELETE * FROM → DELETE FROM
日期函數 Date(), Time(), Now(), DateAdd(), DateDiff() GETDATE(), SYSDATETIME(), DATEADD(), DATEDIFF(), CAST/CONVERT 建立對照表:Date() → CAST(GETDATE() AS DATE)、Now() → GETDATE()
VB/VBA 函數 可直接在 SQL 中用 CStr(), Format(), IIf(), InStr() 不支援;對應 CAST/CONVERT, FORMAT() (2012+), CASE/IIF() (2012+), CHARINDEX() 重寫為標準 T-SQL;複雜邏輯封裝為 UDF
萬用字元 * (多字元), ? (單字元), # (數字) % (多字元), _ (單字元), [0-9] (範圍) LIKE 模式全域替換:* → %, ? → _
參數查詢 PARAMETERS p Text; SELECT * FROM t WHERE f = [p] CREATE PROC ... @p NVARCHAR(50) AS SELECT * FROM t WHERE f = @p 改寫為預存程序/參數化查詢
外部聯接 LEFT JOIN, RIGHT JOIN (舊版 *=, =*) LEFT/RIGHT/FULL OUTER JOIN (ANSI-92 模式) 確認資料庫相容性層級 ≥ 90

遷移工具鏈推薦

  1. SQL Server Migration Assistant (SSMA) for Access:免費官方工具,自動轉換結構、資料、查詢、表單/報表邏輯 (VBA → T-SQL/CLR)
  2. Access 內建「升級精靈」:簡單資料庫可用,但大型/複雜專案易失敗
  3. 手工腳本 + BCP/SSIS:完全控制,適合嚴格上線窗口

驗證清單

  • [ ] 所有 PK/FK/UNIQUE/CHECK/DEFAULT 正確建立
  • [ ] Identity 欄位種子值正確 (避免插入衝突)
  • [ ] 日期資料無截斷/溢位 (特別注意 1753 前日期)
  • [ ] 文字編碼一致 (Access 預設 ANSI/代碼頁 → SQL Server 定序)
  • [ ] 應用層連線字串更新 (Provider=SQLOLEDB → SQLNCLI/MSODBC)
  • [ ] 查詢效能基準測試 (索引、統計資料、參數嗅探)

常見遷移後問題

「原本 Access 查詢秒出,SQL Server 跑超慢」
原因:缺少索引、統計資料過舊、參數嗅探、鎖定升級、網路延遲。對策:UPDATE STATISTICS、OPTION (RECOMPILE)、檢視執行計畫。
「IIf/IsNull/Nz 函數報錯」
改用 CASE WHEN、ISNULL()/COALESCE()、IIF() (SQL 2012+)。
「自動編號插入失敗」
確認 IDENTITY_INSERT 狀態,或用 SEQUENCE (2012+) 替代。
「中文排序/比較異常」
資料庫定序選 Chinese_Taiwan_Stroke_CI_AS 或 Chinese_PRC_CI_AS,避免二進位定序。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved