-- Access / SQL Server (ANSI 相容語法)
CREATE TABLE tblNewOrder (
OrderId COUNTER (1000, 10) PRIMARY KEY, -- 種子 1000, 遞增 10
ItemId LONG,
Quantity LONG
);
說明:`COUNTER(seed, increment)` / `AUTOINCREMENT(seed, increment)` / `IDENTITY(seed, increment)` (SQL Server 標準) 三種寫法視引擎而定。
-- Access
ALTER TABLE tblOrder ALTER COLUMN OrderId COUNTER (2000, 50);
-- SQL Server (標準)
DBCC CHECKIDENT ('tblOrder', RESEED, 1999); -- 下一個插入值 = 1999 + 1 = 2000
-- SQL Server 不支援 ALTER COLUMN 修改 IDENTITY 遞增值,需重建資料表或用 SEQUENCE (2012+)
-- Access
ALTER TABLE tableName ALTER COLUMN OrderId COUNTER (1, 1);
-- VBA: DoCmd.RunSQL "ALTER TABLE tableName ALTER COLUMN OrderId COUNTER (1, 1)"
-- SQL Server
TRUNCATE TABLE tableName; -- 重置 IDENTITY 至種子值 (需無 FK 參照)
-- 或
DBCC CHECKIDENT ('tableName', RESEED, 0); -- 下一個為 1
**DDL 修改種子/遞增不保證唯一性**。
必做防護:
CREATE SEQUENCE dbo.OrderSeq
AS INT
START WITH 1000
INCREMENT BY 10
MINVALUE 1
MAXVALUE 2147483647
NO CYCLE
CACHE 50;
-- 使用
INSERT INTO Orders (OrderId, ...) VALUES (NEXT VALUE FOR dbo.OrderSeq, ...);
優勢:獨立於資料表、可跨表共享、支援 `NEXT VALUE FOR` / `sp_sequence_get_range` 批次取號、可重設/暫停/緩存配置、解決 IDENTITY 侷限。
自動編號種子遞增自訂看似簡單,**唯一性保護才是核心**。Access 用 `COUNTER` + PK/UNIQUE;SQL Server 用 `IDENTITY`/`SEQUENCE` + `DBCC CHECKIDENT` + PK。**生產庫動種子,三思而後行**。