次の方法で共有


オルターシーケンス(Transact-SQL)

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

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

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

シーケンスはユーザー定義のスキーマ バインド オブジェクトであり、仕様に従って数値のシーケンスを生成します。 NEXT VALUE FOR関数を呼び出すことによって、シーケンスから新しい値が生成されます。 sp_sequence_get_rangeを使用して、一度に複数のシーケンス番号を取得します。 CREATE SEQUENCEsp_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 値を許可しない値に変更することはできません。 昇順シーケンスの MINVALUESTART WITH 値より大きい数値に変更したり、降順シーケンスの MAXVALUESTART 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 データ型に変更するには、所有者がこのシーケンス オブジェクトを削除して、適切なデータ型で再作成する必要があります。