CREATE TABLE dbo.Orders (
OrderID BIGINT IDENTITY(10000, 10) PRIMARY KEY, -- 從 10000 開始,每次 +10
OrderDate DATETIME2 NOT NULL DEFAULT SYSUTCDATETIME(),
Amount DECIMAL(18,2)
);
SQL Server **不支援** 直接 `ALTER COLUMN ... IDENTITY(new_seed, new_increment)`。
**標準做法**:新增資料行 → 移舊資料 → 刪舊欄 → 重命名 (或用 `SWITCH` 分區切換)。
-- 檢查目前身分識別值
DBCC CHECKIDENT ('dbo.Orders', NORESEED);
-- Current identity value: 10050.
-- 重置為指定值 (下一筆插入將用此值 + 步長)
DBCC CHECKIDENT ('dbo.Orders', RESEED, 20000); -- 下一筆 = 20010
-- 重置為 0 (下一筆 = 1,假設步長 1)
DBCC CHECKIDENT ('dbo.Orders', RESEED, 0);
注意:表內**必須無資料**,或最大 ID 小於新種子,否則插入會主鍵衝突。
SET IDENTITY_INSERT dbo.Orders ON;
INSERT INTO dbo.Orders (OrderID, OrderDate, Amount) VALUES (9999, '2024-01-01', 100); -- 指定 ID
SET IDENTITY_INSERT dbo.Orders OFF;
-- 方式 1: COUNTER (種子, 步長)
CREATE TABLE Orders (
OrderID LONG COUNTER(1000, 5) PRIMARY KEY,
OrderDate DATETIME,
Amount CURRENCY
);
-- 方式 2: AUTOINCREMENT (種子, 步長) - ANSI-92 模式
CREATE TABLE Orders (
OrderID LONG AUTOINCREMENT(1000, 5) PRIMARY KEY,
...
);
-- 修改下一個值為 2000,步長 50
ALTER TABLE Orders ALTER COLUMN OrderID COUNTER(2000, 50);
-- 重置從 1 開始,步長 1
ALTER TABLE Orders ALTER COLUMN OrderID COUNTER(1, 1);
**VBA 代碼中執行** :
CurrentDb.Execute "ALTER TABLE Orders ALTER COLUMN OrderID COUNTER(1, 1)", dbFailOnError
' 或
DoCmd.RunSQL "ALTER TABLE Orders ALTER COLUMN OrderID COUNTER(1, 1)"
執行 `ALTER COLUMN ... COUNTER` **不會驗證現有資料**,若表內已有 ID=5,重置為 1 會導致下一筆插入產生 **重複主鍵錯誤** (若設為 PK) 或 **靜默重複** (若無 PK)。
**安全流程**:
| 操作 | SQL Server | Access (ACE/Jet) | MySQL | PostgreSQL |
|---|---|---|---|---|
| 建表指定 | IDENTITY(seed, inc) | COUNTER(seed, inc) | AUTO_INCREMENT=seed (僅種子) | GENERATED ... AS IDENTITY (START WITH seed INCREMENT BY inc) |
| 修改種子/步長 | **不支援直接改** (需重建欄位) | ALTER COLUMN ... COUNTER(seed, inc) | ALTER TABLE ... AUTO_INCREMENT=seed | ALTER SEQUENCE ... RESTART WITH seed; ALTER SEQUENCE ... INCREMENT BY inc; |
| 重置/檢查 | DBCC CHECKIDENT | 同上 ALTER | ALTER TABLE ... AUTO_INCREMENT=1 | ALTER SEQUENCE ... RESTART; |
| 手動插入指定值 | SET IDENTITY_INSERT ON | 直接 INSERT (無限制) | 直接 INSERT | OVERRIDING SYSTEM VALUE |