SQLServerでシーケンスを作成するには、CREATE SEQUENCE文を使用します。
構文
- (シーケンス作成構文)
- CREATE SEQUENCE <スキーマ名>.<シーケンス名> [AS <データ型>] [START WITH <開始値>] [INCREMENT BY <増分値>] [MINVALUE <最小値> | NO MINVALUE] [MAXVALUE <最大値> | NO MAXVALUE] [CYCLE | NO CYCLE] [CACHE <キャッシュ数> | NO CACHE]
[ ]で囲まれた項目はすべて省略可能です。省略した場合は既定値が使用されます。
サンプル
例)1から始まり1ずつ増えるシーケンス「Test.CountBy1」を作成する
|
1 2 3 |
CREATE SEQUENCE Test.CountBy1 START WITH 1 INCREMENT BY 1; |
例)作成したシーケンスから値を取得する
値を取得するには、NEXT VALUE FOR関数を使用します。
|
1 |
SELECT NEXT VALUE FOR Test.CountBy1; |
- (実行結果:1回目)
- 1
- (実行結果:2回目)
- 2
実行するたびに値が1ずつ増えていきます。INSERT文の中で直接使うことも、事前に値だけを取得しておくこともできます。
例)データ型・最小値・最大値・循環(CYCLE)を指定して作成する
|
1 2 3 4 5 6 7 8 |
CREATE SEQUENCE Test.DecSeq AS DECIMAL(3,0) START WITH 125 INCREMENT BY 25 MINVALUE 100 MAXVALUE 200 CYCLE CACHE 3; |
125→150→175→200と増えていき、次にMAXVALUE(200)を超えるとMINVALUE(100)へ戻ります。CYCLEを指定しない場合は、上限に達した時点でエラーになります。
備考
- データ型を省略した場合はbigintが使用され、開始値・最小値・最大値もそのデータ型の範囲に応じた既定値が自動的に設定されます。
- 作成したシーケンスの設定内容は、sys.sequencesカタログビューで確認できます。
⇒ [SQLServer] シーケンスの一覧を確認する - IDENTITY列とは異なり、シーケンスは特定のテーブルに紐づかない独立したオブジェクトです。複数のテーブルで同じシーケンスを共有したり、テーブルへのINSERTを伴わずに値だけを取得したりできます。
- 作成済みのシーケンスを削除するには、DROP SEQUENCE文を使用します。
(例)DROP SEQUENCE Test.CountBy1;