共用方式為


改變序列 (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_rangeNEXT 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 <常數> ]

序列物件傳回的下一個值。 如果提供,則值 RESTART WITH 必須是小於或等於序列物件最大值且大於或等於最小值的整數。 如果省略該 WITH 值,則序號將根據原始 CREATE SEQUENCE 選項重新啟動。

INCREMENT BY <常數>

用於遞增 (如果為負數) 序列物件的基值的值,則為函數的 NEXT VALUE FOR 每次呼叫。 如果增量是負值,則序列物件會遞減,否則會遞增。 增量不能是 0。

[ MINVALUE <常數> | NO MINVALUE ]

指定順序物件的界限。 如果指定,則 NO MINVALUE 會使用序列資料類型的最小可能值。

[ MAXVALUE <常數> |無最大值 ]

指定順序物件的界限。 如果指定,則 NO MAXVALUE 會使用序列資料類型的最大可能值。

[ 循環 |無循環 ]

此屬性會指定序列物件是否應該從最小值 (或遞減序列物件的最大值) 重新啟動,或在超過其最小值或最大值時擲回例外狀況。

注意

循環後,下一個值是最小值或最大值,而不是序列的值 START VALUE

[ 快取 [ <常數> ] |無緩存 ]

藉由減少產生的值保存至系統資料表時所需的 IO 數目,對使用順序物件的應用程式提升效能。

如需快取行為的詳細資訊,請參閱 CREATE SEQUENCE。

備註

如需如何建立序列以及如何管理序列快取的相關資訊,請參閱 CREATE SEQUENCE。

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. 變更序列

下列範例會建立名為 Test 的結構描述以及名為 TestSeq 的順序,其使用 int 資料類型,且範圍介於 100 到 200 之間。 順序開頭為 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 順序的範圍改成介於 50 到 200 之間。 順序會從 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 資料類型,擁有者必須卸除順序物件,並重新建立具有適當資料類型的物件。