原 MySQL 語句
CREATE TABLE trade (
tradeid int NOT NULL PRIMARY KEY identity(17,1),
userid int NOT NULL,
tradetime datetime NOT NULL,
KEY "user_id_fk" ("userid"),
CONSTRAINT "user_id_fk" FOREIGN KEY ("userid") REFERENCES "userinfo" ("userid")
)
SQL Server 修正版
CREATE TABLE trade (
tradeid int NOT NULL PRIMARY KEY IDENTITY(17,1),
userid int NOT NULL,
tradetime datetime NOT NULL,
CONSTRAINT user_id_fk FOREIGN KEY (userid) REFERENCES userinfo(userid)
)
差異對照表
| 項目 | MySQL | SQL Server | 說明 |
| 自增種子/步長 | AUTO_INCREMENT 或 IDENTITY (8.0+) | IDENTITY(seed, step) | SQL Server 原生支援 |
| 索引關鍵字 | KEY / INDEX | 無獨立關鍵字,隱含在約束中 | 外鍵自動創建非聚簇索引 |
| 標識符引號 | 反引號 ` 或雙引號 " (ANSI_QUOTES) | 方括號 [] 或雙引號 " (QUOTED_IDENTIFIER ON) | 建議無特殊字符時不加引號 |
| 外鍵語法 | CONSTRAINT name FOREIGN KEY (col) REFERENCES tbl(col) | 相同,但標識符引號不同 | SQL Server 不需單獨 KEY 行 |
遷移檢查清單
- 數據類型映射:
TINYINT→TINYINT、DATETIME→DATETIME2、TEXT→NVARCHAR(MAX)。
- 字符集/排序規則:MySQL
utf8mb4 對應 SQL Server Latin1_General_CI_AS 或指定 COLLATE。
- 默認值函數:
NOW() → GETDATE() / SYSDATETIME()。
- 存儲過程/觸發器:T-SQL 與 MySQL 語法差異大,需人工重寫。
工具推薦
- SQL Server Migration Assistant (SSMA) for MySQL:官方免費工具,支援結構與數據自動遷移。
- DataGrip / DBeaver:跨數據庫 DDL 生成與同步。