ALTER SEQUENCE (Transact-SQL)
適用於:SQL ServerAzure SQL 資料庫Azure 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 <常數> ]
順序物件會傳回的下一個值。 如果提供的話,RESTART WITH 值必須是小於或等於順序物件最大值,而且大於或等於最小值的整數。 如果省略 WITH 值,順序編號會依據原始 CREATE SEQUENCE 選項重新啟動。
INCREMENT BY <常數>
每次呼叫 NEXT VALUE FOR 函式時,用來遞增順序物件基底值的值 (如果是負數則遞減)。 如果增量是負值,則會遞減順序物件,否則會遞增。 增量不能為 0。
[ MINVALUE <常數> | NO MINVALUE ]
指定順序物件的界限。 如果指定 NO MINVALUE,則使用順序資料類型的最小可能值。
[ MAXVALUE <常數> | NO MAXVALUE
指定順序物件的界限。 如果指定 NO MAXVALUE,則使用順序資料類型的最大可能值。
[ CYCLE | NO CYCLE ]
這個屬性指定當超出其最小值或最大值時,順序物件應該從最小值 (或是遞減順序物件的最大值) 重新啟動,還是擲回例外狀況。
注意
在循環之後,下一個值是順序的最小值或最大值,而不是 START VALUE。
[ CACHE [<常數> ] | 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. 改變順序
下列範例會建立名為 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 資料類型,擁有者必須卸除順序物件,並重新建立具有適當資料類型的物件。
另請參閱
CREATE SEQUENCE (Transact-SQL)
DROP SEQUENCE (Transact-SQL)
NEXT VALUE FOR (Transact-SQL)
序號
sp_sequence_get_range (Transact-SQL)