Access (Jet/ACE) 與 SQL Server (T-SQL) 在資料類型、函數、DML/DDL 語法上存在顯著差異,遷移或跨平台開發時必須逐項對照調整。
| 類別 | Access | SQL Server | 備註 |
|---|---|---|---|
| 布林字面值 | True / False | 1 / 0 或 BIT | Access 欄位類型「是/否」→ SQL Server BIT |
| 日期字面值 | #2023-01-01# | '2023-01-01' | Access 專用 #包裹# |
| 當前日期時間 | Now() / Date() / Time() | GETDATE() / SYSDATETIME() | |
| 日期差 | DateDiff('d', d1, d2) | DATEDIFF(day, d1, d2) | Access 間隔字串 'd'、'm'、'yyyy' |
| 自動編號 | AUTOINCREMENT (長整數) | IDENTITY(1,1) | 遷移後需手動 ALTER COLUMN ... ADD IDENTITY |
| 是/否 欄位轉換 | BIT (非空) | BIT (可空) | 遷移後常變非空,需 ALTER COLUMN col BIT NULL |
| 刪除語法 | DELETE * FROM tbl WHERE ... | DELETE FROM tbl WHERE ... (無 *) | |
| 字串連接 | & 或 + | + (需 SET CONCAT_NULL_YIELDS_NULL OFF 兼容) | |
| VB 函數支援 | 可直接用 CStr(), Format() 等 | 不可用,需對應 T-SQL 函數 | |
| 日期型別預設 | Date/Time (雙精度浮點) | DATETIME / DATETIME2 | 遷移建議目標用 DATETIME2 範圍更大 |
| TOP 子句 | SELECT TOP 10 * | SELECT TOP (10) * (建議加括號) |
.sql。smalldatetime → datetime (或 datetime2)nvarchar → varchar (視需求)ALTER TABLE t ALTER COLUMN id INT IDENTITY(1,1)。DATETIME2。BIT NOT NULL,若應用允許 NULL 需手動 ALTER COLUMN col BIT NULL。DELETE * FROM 在 SQL Server 報錯,統一移除 *。若程式碼需同時支援 Access 與 SQL Server,建議:
DbProviderFactory 動態生成 SQL。CStr, IIf 等),改用標準 SQL (CAST, CASE)。