適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
既存のシーケンス オブジェクトの引数を変更します。 シーケンスが CACHE オプションで作成された場合、シーケンスを変更するとキャッシュが再作成されます。
シーケンス オブジェクトは、CREATE SEQUENCE ステートメントを使用して作成されます。 シーケンスは整数値であり、整数を返す任意のデータ型を指定できます。
ALTER SEQUENCE ステートメントを使用してデータ型を変更することはできません。 データ型を変更するには、シーケンス オブジェクトを削除して再作成します。
シーケンスはユーザー定義のスキーマ バインド オブジェクトであり、仕様に従って数値のシーケンスを生成します。
NEXT VALUE FOR関数を呼び出すことによって、シーケンスから新しい値が生成されます。
sp_sequence_get_rangeを使用して、一度に複数のシーケンス番号を取得します。
CREATE SEQUENCE、sp_sequence_get_range、およびNEXT VALUE FOR関数の両方を使用する情報とシナリオについては、「シーケンス番号」を参照してください。
構文
ALTER SEQUENCE [ schema_name. ] sequence_name
[ RESTART [ WITH <constant> ] ]
[ INCREMENT BY <constant> ]
[ { MINVALUE <constant> } | { NO MINVALUE } ]
[ { MAXVALUE <constant> } | { NO MAXVALUE } ]
[ CYCLE | { NO CYCLE } ]
[ { CACHE [ <constant> ] } | { NO CACHE } ]
[ ; ]
引数
sequence_name
データベースに認識されるシーケンスの一意な名前を指定します。 データ型は sysname です。
再起動 [ <一定> ]
シーケンス オブジェクトによって返される次の値。 指定する場合、 RESTART WITH 値は、シーケンス オブジェクトの最大値以下、および最小値以上の整数である必要があります。
WITH値を省略すると、元のCREATE SEQUENCE オプションに基づいてシーケンス番号が再開されます。
<定数による増分>
NEXT VALUE FOR関数の呼び出しごとにシーケンス オブジェクトの基本値をインクリメント (負の場合はデクリメント) するために使用される値。 増分が負の値の場合、シーケンス オブジェクトは降順で、それ以外の場合は昇順です。 増分を 0 にすることはできません。
[ MINVALUE <constant> |NO MINVALUE ]
シーケンスのオブジェクトの境界を指定します。
NO MINVALUEを指定した場合は、シーケンス データ型の最小値が使用されます。
[ MAXVALUE <constant> |NO MAXVALUE ]
シーケンスのオブジェクトの境界を指定します。
NO MAXVALUEを指定した場合は、シーケンス データ型の最大値が使用されます。
[ CYCLE |NO CYCLE ]
このプロパティは、シーケンス オブジェクトを最小値 (または降順シーケンス オブジェクトの場合は最大値) から再開するか、その最小値または最大値を超えたときに例外をスローするかを指定します。
Note
循環後、次の値は、シーケンスの START VALUE ではなく、最小値または最大値になります。
[ CACHE [ <constant> ] |NO CACHE ]
生成された値をシステム テーブルに保存するのに必要な IO の数を最小限に抑えることで、シーケンス オブジェクトを使用するアプリケーションのパフォーマンスが向上します。
キャッシュの動作の詳細については、「 CREATE SEQUENCE」を参照してください。
解説
シーケンスの作成方法とシーケンス キャッシュの管理方法については、「 CREATE SEQUENCE」を参照してください。
昇順シーケンスの MINVALUE と、降順シーケンスの MAXVALUE を、シーケンスの START WITH 値を許可しない値に変更することはできません。 昇順シーケンスの MINVALUE を START WITH 値より大きい数値に変更したり、降順シーケンスの MAXVALUE を START WITH 値より小さい数値に変更したりするには、 RESTART WITH 引数を含め、最小値と最大値の範囲内の目的のポイントでシーケンスを再開します。
Metadata
シーケンスの詳細については、「 sys.sequences」を参照してください。
アクセス許可
シーケンス ALTER 権限、またはスキーマに対する ALTER 権限が必要です。 シーケンス ALTER アクセス許可を付与するには、次の形式で ALTER ON OBJECT を使用します。
GRANT ALTER
ON OBJECT::Test.TinySeq TO [AdventureWorks\Larry];
シーケンス オブジェクトの所有権は、 ALTER AUTHORIZATION ステートメントを使用して転送できます。
Audit
ALTER SEQUENCEを監査するには、SCHEMA_OBJECT_CHANGE_GROUPを監視します。
例
シーケンスの作成と NEXT VALUE FOR 関数を使用したシーケンス番号の生成の両方の例については、「 シーケンス番号」を参照してください。
A. シーケンスを変更する
次の例では、100 から 200 の範囲の int データ型を使って、Test という名前のスキーマと TestSeq という名前のシーケンスを作成します。 シーケンスは 125 で始まり、数値が生成されるたびに 25 ずつ増加します。 シーケンスは循環するように構成されているため、値が最大値の 200 を超えると、最小値 100 でシーケンスが再開されます。
CREATE SCHEMA Test;
GO
CREATE SEQUENCE Test.TestSeq
AS INT
START WITH 125
INCREMENT BY 25
MINVALUE 100
MAXVALUE 200
CYCLE
CACHE 3;
GO
次の例では、50 から 200 の範囲を指定して TestSeq シーケンスを変更します。 シーケンスの番号が 100 から再開し、数値が生成されるたびに 50 ずつ増加します。
ALTER SEQUENCE Test.TestSeq
RESTART WITH 100
INCREMENT BY 50
MINVALUE 50
MAXVALUE 200
NO CYCLE
NO CACHE;
GO
シーケンスは循環しないため、シーケンスが 200 を超えると、 NEXT VALUE FOR 関数によってエラーが発生します。
B. シーケンスを再起動する
次の例では、 CountBy1という名前のシーケンスを作成します。 このシーケンスでは既定値が使用されます。
CREATE SEQUENCE Test.CountBy1;
シーケンスの値を生成するには、所有者は次のステートメントを実行します。
SELECT NEXT VALUE FOR Test.CountBy1;
返される値 -9,223,372,036,854,775,808 は、bigint データ型の最小値です。 所有者は、シーケンスが 1 で始まる必要があることを認識していますが、シーケンスの作成時に START WITH 句を示しませんでした。 このエラーを修正するには、所有者は次のステートメントを実行します。
ALTER SEQUENCE Test.CountBy1
RESTART WITH 1;
その後、次のステートメントを再度実行して、シーケンス番号を生成します。
SELECT NEXT VALUE FOR Test.CountBy1;
今度は、想定どおりに番号が 1 になります。
CountBy1 シーケンスは既定値の NO CYCLE を使用して作成されているため、数値 9,223,372,036,854,775,807 を生成した後に動作を停止します。 シーケンス オブジェクトの後続の呼び出しでは、エラー 11728 が返されます。 次のステートメントでは、シーケンス オブジェクトが循環するように変更され、キャッシュが 20 に設定されます。
ALTER SEQUENCE Test.CountBy1
CYCLE
CACHE 20;
これにより、シーケンス オブジェクトは 9,223,372,036,854,775,807 に達すると循環し、次の数値はデータ型の最小値である -9,223,372,036,854,775,808 になります。
所有者は 、bigint データ型が使用されるたびに 8 バイトを使用することを認識しました。 4 バイトを使用する int データ型で十分です。 ただし、シーケンス オブジェクトのデータ型は変更できません。 int データ型に変更するには、所有者がこのシーケンス オブジェクトを削除して、適切なデータ型で再作成する必要があります。