MW211 EXIT

devlog
MSSQL/自動採番(SEQUENCE)
2015年05月29日
連番などの自動採番には属性に「IDENTIFY」を設定するやり方があるが
「SEQUENCE」を使用するやり方もある

まず、基本的な定義は以下の通り。(1から+1していく)
┌──────────────────────────────────────┐
│CREATE SEQUENCE 連番 AS int                                                 │
│    START WITH 1                                                            │
│    INCREMENT BY 1;                                                         │
└──────────────────────────────────────┘

そして使用方法は以下のような感じ
┌──────────────────────────────────────┐
│SELECT NEXT VALUE FOR 連番;                                                 │
└──────────────────────────────────────┘
これを(SELECT以外を)、INSERT文で代入してやればよい。

現在値を確認するには「sys.sequences」の中を覗くとよい。
┌──────────────────────────────────────┐
│SELECT current_value                                                        │
│    FROM sys.sequences                                                      │
│    WHERE name = '連番';                                                    │
└──────────────────────────────────────┘

現在値を変更するには以下のような感じにすればよい。(以下は、現在値を「1」にする)
┌──────────────────────────────────────┐
│ALTER SEQUENCE 連番 RESTART WITH 1;                                         │
└──────────────────────────────────────┘

「1~100」の間で循環させる場合には以下のような感じに定義してあげる。
┌──────────────────────────────────────┐
│CREATE SEQUENCE 連番 AS int                                                 │
│    START WITH 1                                                            │
│    INCREMENT BY 1                                                          │
│    MINVALUE 1                                                              │
│    MAXVALUE 100                                                            │
│    CYCLE;                                                                  │
└──────────────────────────────────────┘

「IDENTIFY」と比較しての利点となれば
これは複数の表で共用できるというところであろう。
つまり、連番が特定の表から独立した感じになる。
分類:MSSQL