ALTER SEQUENCE (Transact-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 <constant> ]
    シーケンス オブジェクトによって返される次の値です。 RESTART WITH 値を指定する場合は、シーケンス オブジェクトの最小値以上および最大値以下の整数にする必要があります。 WITH 値を省略した場合は、元の CREATE SEQUENCE オプションに基づいてシーケンスの番号付けが再開されます。

  • INCREMENT BY <constant>
    NEXT VALUE FOR 関数を呼び出すたびに必要なシーケンス オブジェクトの基準値を増分 (負の場合は減少) させるのに使用される値です。 増分値が負の値の場合はシーケンス オブジェクトは降順で、それ以外の場合は昇順です。 0 は増分として使用できません。

  • [ MINVALUE <constant> | NO MINVALUE ]
    シーケンスのオブジェクトの境界を指定します。 NO MINVALUE を指定すると、シーケンスのデータ型の最小値が使用されます。

  • [ MAXVALUE <constant> | NO MAXVALUE
    シーケンスのオブジェクトの境界を指定します。 NO MAXVALUE を指定すると、シーケンスのデータ型の最大値が使用されます。

  • [ CYCLE | NO CYCLE ]
    このプロパティは、最小値または最大値を超過した場合に、シーケンス オブジェクトを最小値 (降順シーケンス オブジェクトの場合は最大値) から再開するか、例外をスローするかを指定します。

    注意

    循環後の次の値は最小値または最大値で、シーケンスの START VALUE ではありません。

  • [ CACHE [<constant> ] | NO CACHE ]
    生成された値をシステム テーブルに保存するのに必要な IO の数を最小限に抑えることで、シーケンス オブジェクトを使用するアプリケーションのパフォーマンスが向上します。

    キャッシュの動作の詳細については、「CREATE SEQUENCE (Transact-SQL)」を参照してください。

説明

シーケンスの作成方法と、シーケンスのキャッシュの管理方法の詳細については、「CREATE SEQUENCE (Transact-SQL)」を参照してください。

昇順のシーケンスの MINVALUE と降順のシーケンスの MAXVALUE は、シーケンスの START WITH 値を許可しない値に変更することはできません。 昇順のシーケンスの MINVALUE を START WITH 値より大きい数に変更する、または降順のシーケンスの MAXVALUE を START WITH 値より小さい数に変更するには、RESTART WITH 引数を含めて、最小値と最大値の範囲内にある目的の位置からシーケンスを再開します。

メタデータ

シーケンスの詳細については、「sys.sequences」を参照してください。

セキュリティ

権限

シーケンスに対する ALTER 権限、またはスキーマに対する ALTER 権限が必要です。 シーケンスに対する ALTER 権限を許可するには、次の形式で ALTER ON OBJECT を使用します。

GRANT ALTER ON OBJECT::Test.TinySeq TO [AdventureWorks\Larry]

シーケンス オブジェクトの所有権は、ALTER AUTHORIZATION ステートメントを使って譲渡できます。

監査

ALTER SEQUENCE を監査するには、SCHEMA_OBJECT_CHANGE_GROUP を監視します。

使用例

シーケンスを作成し、NEXT VALUE FOR 関数を使用してシーケンス番号を生成する例については、「シーケンス番号」を参照してください。

A. シーケンスを変更する

次の例では、0 ~ 255 の範囲の 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

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

関連項目

参照

CREATE SEQUENCE (Transact-SQL)

DROP SEQUENCE (Transact-SQL)

NEXT VALUE FOR (Transact-SQL)

sp_sequence_get_range (Transact-SQL)

概念

シーケンス番号