ALTER SEQUENCE (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL データベース

既存のシーケンス オブジェクトの引数を変更します。 シーケンスが CACHE オプションで作成された場合、シーケンスを変更するとキャッシュが再作成されます。

シーケンスオブジェクトは CREATE SEQUENCE 文を用いて作成されます。 シーケンスは整数値であり、整数を返す任意のデータ型を指定できます。 ALTER SEQUENCE ステートメントを使用してデータ型を変更することはできません。 データ型を変更するには、シーケンス オブジェクトを削除して再作成します。

シーケンスはユーザー定義のスキーマ バインド オブジェクトであり、仕様に従って数値のシーケンスを生成します。 NEXT VALUE FOR関数を呼び出すことによって、シーケンスから新しい値が生成されます。 sp_sequence_get_rangeを使用して、一度に複数のシーケンス番号を取得します。 CREATE SEQUENCE、sp_sequence_get_range、およびNEXT VALUE FOR関数の両方を使用する情報とシナリオについては、「シーケンス番号」を参照してください。

Transact-SQL 構文表記規則

構文

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 データ型に変更するには、所有者がこのシーケンス オブジェクトを削除して、適切なデータ型で再作成する必要があります。