SQL Server 用 Sequence 建立流水號

June 19, 2025

SQL Server 2012 (Denali) 增加了 Sequence 功能,可以用來建立流水號。

什麼時候適合用 Sequence 而不是 Identity

  • 一個值需要被多張資料表共用,例如跨表的統一流水號。
  • 需要預先取得編號的情形(不像 IDENTITY 必須插入資料才能產生)。
  • 更細微地控制遞增數值範圍。

特性

  • Sequence 屬於資料庫層級,和資料表裡的 Identity 欄位只對該資料表有效是不一樣的。
  • 遞增的動作不會受到 Transcation rollback 的影響,就算交易失敗也會保持遞增結果。

語法

顯示目前資料庫裡的 Sequence:

SELECT * FROM sys.sequences

建立新的 Sequence:

CREATE SEQUENCE SequenceTest -- 建立名為 SequenceTest 的 Sequence
START WITH 1 -- 從 1 開始
INCREMENT BY 1 -- 遞增數量

取得 Sequence 的下一個數字:

SELECT NEXT VALUE FOR SequenceTest 

修改目前的 Sequence:

ALTER SEQUENCE SequenceTest -- 要修改的 Sequence
RESTART WITH 1 -- 從哪個數字開始
INCREMENT BY 1 -- 遞增數量 (要遞減可以設負數)
MINVALUE 1 -- 設定最小範圍
MAXVALUE 1000000 -- 設定最大範圍

此外,還有 CYCLE 可設定超過最大值時,從最小值重新開始。

參考資料