SQL Serverのシーケンス(SEQUENCE)とは?作成・削除・プロパティ確認の完全ガイド
シーケンス(SEQUENCE)とは、一定の順序に従って並べられた整数の集合のことです。多くのアプリケーションでは、テーブルの各行に主キーのような一意な値を持たせる必要があるため、データベースではシーケンスが頻繁に利用されています。
この記事では、SQL Serverでシーケンスを作成・削除するための構文と具体的な使用例をわかりやすく解説します。
CREATE SEQUENCE(シーケンスの作成)
構文
シーケンスを作成するには、以下の構文を使用します。
CREATE SEQUENCE [schema.] sequence_name
[AS datatype]
[START WITH value]
[INCREMENT BY value]
[MINVALUE value | NO MINVALUE]
[MAXVALUE value | NO MAXVALUE]
[CYCLE | NO CYCLE]
[CACHE value | NO CACHE];
パラメータの説明:
- AS datatype:シーケンスのデータ型を指定します。指定できるのはBIGINT、INT、TINYINT、SMALLINT、DECIMAL、NUMERICです。省略した場合はBIGINTが既定値として設定されます。
- START WITH value:シーケンスが最初に返す開始値を指定します。
- INCREMENT BY value:シーケンスの増加・減少の間隔を指定します。正の値を指定すれば増加するシーケンスに、負の値を指定すれば減少するシーケンスになります。
- MINVALUE value:シーケンスの最小値を指定します。
- NO MINVALUE:最小値を指定しません。
- MAXVALUE value:シーケンスの最大値を指定します。
- NO MAXVALUE:最大値を指定しません。
- CYCLE:シーケンスが最大値に達した後、先頭から再び繰り返します。
- NO CYCLE:シーケンスが終端に達するとエラーとなり、再び最初から始まることはありません。
- CACHE value:ディスクI/Oを最小限に抑えるため、指定した数の値をキャッシュに保持します。
- NO CACHE:キャッシュを使用しません。
使用例
CREATE SEQUENCE contacts_seq
AS BIGINT
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 99999
NO CYCLE
CACHE 10;
この例では、contacts_seqという名前のシーケンスを作成しています。開始値は1で、以降の値は1ずつ増加します(2、3、4…)。約10個の値がキャッシュに保持され、最大値は99999です。最大値に達した後はシーケンスが再スタートしないよう設定されています。
また、上記のコマンドは以下のようにシンプルに記述することもできます。
CREATE SEQUENCE contacts_seq
START WITH 1
INCREMENT BY 1;
これで、オートナンバー(自動採番)フィールドのような働きをするシーケンスが作成できました。
NEXT VALUE FORでシーケンスの値を取得する
作成したシーケンスから次の値を取り出すには、NEXT VALUE FORコマンドを使用します。
SELECT NEXT VALUE FOR contacts_seq;
このステートメントは、contacts_seqから次の値を取得します。取得した値は、必要に応じてさまざまな処理に利用できます。例えば以下のように使います。
INSERT INTO contacts
(contact_id, last_name)
VALUES
(NEXT VALUE FOR contacts_seq, 'Smith');
このINSERTステートメントは、contactsテーブルに新しいレコードを挿入します。contact_idフィールドにはcontacts_seqから取得した次の番号が割り当てられ、last_nameフィールドには「Smith」が格納されます。
DROP SEQUENCE(シーケンスの削除)
一度作成したシーケンスでも、何らかの理由でデータベースから削除したい場合があります。
構文
シーケンスを削除するには、以下の構文を使用します。
DROP SEQUENCE sequence_name;
パラメータの説明:
sequence_name:削除したいシーケンスの名前を指定します。
使用例
DROP SEQUENCE contacts_seq;
このコマンドを実行すると、データベースからcontacts_seqシーケンスが削除されます。
シーケンスのプロパティ確認
シーケンスのプロパティ情報を確認するには、以下の構文を使用します。
SELECT * FROM sys.sequences WHERE name = 'sequence_name';
パラメータの説明:
sequence_name:プロパティを確認したいシーケンスの名前を指定します。
使用例
SELECT *
FROM sys.sequences
WHERE name = 'contacts_seq';
この例では、システムビューsys.sequencesから情報を照会し、contacts_seqシーケンスに関する結果を取得しています。
sys.sequencesの主なカラム一覧
| カラム名 | 説明 |
|---|---|
| name | CREATE SEQUENCEステートメントで作成されたシーケンスの名前 |
| object_id | シーケンスオブジェクトのID |
| principal_id | 所有者プリンシパルのID |
| schema_id | シーケンスが属するスキーマのID |
| parent_object_id | 親オブジェクトのID |
| type | SO |
| type_desc | SEQUENCE_OBJECT |
| create_date | CREATE SEQUENCEコマンドによるシーケンスの作成日時 |
| modify_date | 最終変更日時 |
| is_ms_shipped | 0または1の値 |
| is_published | 0または1の値 |
| is_schema_published | 0または1の値 |
| start_value | シーケンスの開始値 |
| increment | シーケンスの増加・減少の間隔 |
| minimum_value | シーケンスの最小値 |
| maximum_value | シーケンスの最大値 |
| is_cycling | 0または1の値。0 = NO CYCLE、1 = CYCLE |
| is_cached | 0または1の値。0 = NO CACHE、1 = CACHE |
| cache_size | is_cached = 1の場合のキャッシュバッファサイズ |
| system_type_id | シーケンスのシステム型ID |
| user_type_id | シーケンスのユーザー型ID |
| precision | シーケンスのデータ型の最大精度 |
| scale | シーケンスの最大小数点以下桁数 |
| current_value | シーケンスから最後に取得された値 |
| is_exhausted | 0または1の値。0 = シーケンスにまだ値が残っている、1 = 値が使い切られている |
-
【SQL Server】IS NOT NULL条件の使い方を徹底解説!基本構文と実用例まとめ
SQL ServerにおけるIS NOT NULL条件とはこの記事では、SQL ServerでIS NOT NULL条件を使用する方法を、具体的な構文と実行例とともにわかりやすく解説します。SQL ServerのIS NOT NULL条件は、値がNULLでないことを判定するために使用される条件式です。ここでいうNULL値とは、テーブルのフィールドが空である状態、つまり「何も値が格納されていない」ことを意味します。IS NOT NULLの基本構文expression IS NOT NULL引数と戻り値についてIS NOT NULL条件の評価結果は以下の通りです。式の値がNULLでない場合:TRU
-
MS SQL Serverとは?特徴・主な用途・バージョン履歴・インスタンスの基インスタンスの基礎を徹底解説
SQL Server(MS SQL Server)とは? SQL Serverは、Microsoftが開発したリレーショナルデータベース管理システム(RDBMS)です。従来のRDBMSの枠組みにとどまらず、オブジェクト指向の概念も取り入れたORDBMS(オブジェクトリレーショナルデータベース管理システム)としての側面も併せ持っています。主な特徴は以下の通りです。 Microsoftが開発したRDBMSベースのデータベースソフトウェアである ORDBMS(オブジェクトリレーショナルデータベース管理システム)としても機能する 特定のプラットフォームに依存しない独立した環境で動作する コマンドライ