Sdílet prostřednictvím


ALTER SEQUENCE (Transact-SQL)

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instance

Upraví argumenty existujícího sekvenčního objektu. Pokud byla sekvence vytvořena s možností CACHE, změna sekvence znovu vytvoří mezipaměť.

Objekty sekvence se vytvářejí pomocí příkazu CREATE SEQUENCE. Sekvence jsou celočíselné hodnoty a můžou být libovolného datového typu, který vrací celé číslo. Datový typ nelze změnit pomocí příkazu ALTER SEQUENCE. Pokud chcete změnit datový typ, odstraňte a vytvořte sekvenční objekt.

Sekvence je uživatelem definovaný objekt vázaný na schéma, který generuje posloupnost číselných hodnot podle specifikace. Nové hodnoty se generují ze sekvence voláním funkce NEXT HODNOTA FOR. Pomocí sp_sequence_get_range můžete získat více pořadových čísel najednou. Informace a scénáře, které používají funkci CREATE SEQUENCE, sp_sequence_get_rangea NEXT VALUE FOR, najdete v tématu pořadová čísla.

Transact-SQL konvence syntaxe

Syntax

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 } ]  
    [ ; ]  

Argumenty

sequence_name
Určuje jedinečný název, podle kterého je posloupnost známá v databázi. Typ je sysname .

RESTART [ WITH <constant> ]
Další hodnota, která bude vrácena sekvenčním objektem. V případě potřeby musí být hodnota RESTART WITH celé číslo, které je menší nebo rovno maximální a větší nebo rovno minimální hodnotě sekvenčního objektu. Pokud je hodnota WITH vynechána, pořadové číslování se restartuje na základě původních možností CREATE SEQUENCE.

INCREMENT BY <konstantní>
Hodnota, která se používá k přírůstku (nebo dekrementování, pokud je záporná) základní hodnota sekvenčního objektu pro každé volání funkce NEXT VALUE FOR. Pokud je přírůstkem záporná hodnota, je objekt sekvence sestupný, jinak je vzestupný. Přírůstek nemůže být 0.

[ MINVALUE <konstanta> | NO MINVALUE ]
Určuje hranice pro sekvenční objekt. Pokud je zadána hodnota NO MINVALUE, použije se minimální možná hodnota sekvenčního datového typu.

[ MAXVALUE <konstanta> | BEZ HODNOTY MAXVALUE
Určuje hranice pro sekvenční objekt. Pokud je zadána hodnota NO MAXVALUE, použije se maximální možná hodnota sekvenčního datového typu.

[ CYKLUS | NO CYCLE ]
Tato vlastnost určuje, zda se má sekvenční objekt restartovat z minimální hodnoty (nebo maxima pro sestupné sekvenční objekty) nebo vyvolat výjimku při překročení minimální nebo maximální hodnoty.

Poznámka

Po cyklování je další hodnota minimální nebo maximální hodnota, nikoli hodnota START sekvence.

[ MEZIPAMĚŤ [<konstanta> ] | ŽÁDNÁ MEZIPAMĚŤ ]
Zvyšuje výkon aplikací, které používají sekvenční objekty, minimalizací počtu IO, které jsou nutné k zachování generovaných hodnot v systémových tabulkách.

Další informace o chování mezipaměti naleznete v tématu CREATE SEQUENCE (Transact-SQL).

Poznámky

Informace o vytváření sekvencí a o správě mezipaměti sekvence naleznete v tématu CREATE SEQUENCE (Transact-SQL).

Hodnota MINVALUE pro vzestupné sekvence a MAXVALUE pro sestupné sekvence nelze změnit na hodnotu, která nepovoluje hodnotu START WITH sekvence. Chcete-li změnit hodnotu MINVALUE vzestupné sekvence na číslo větší než hodnota START WITH nebo změnit hodnotu MAXVALUE sestupné sekvence na číslo menší než hodnota START WITH, zahrňte argument RESTART WITH pro restartování sekvence v požadovaném bodě, který spadá do minimálního a maximálního rozsahu.

Metadata

Informace o sekvencích sys.sequences.

Bezpečnost

Dovolení

Vyžaduje oprávnění ALTER pro sekvenci nebo oprávnění ALTER schématu. Chcete-li udělit ALTER oprávnění k sekvenci, použijte ALTER ON OBJECT v následujícím formátu:

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

Vlastnictví sekvenčního objektu lze přenést pomocí příkazu ALTER AUTHORIZATION.

Audit

Pokud chcete auditovat ALTER SEQUENCE, monitorujte SCHEMA_OBJECT_CHANGE_GROUP.

Příklady

Příklady vytváření sekvencí i použití funkce NEXT VALUE FOR k vygenerování pořadových čísel najdete v tématu Pořadová čísla.

A. Změna sekvence

Následující příklad vytvoří schéma s názvem Test a posloupnost s názvem TestSeq pomocí int datového typu, který má rozsah od 100 do 200. Sekvence začíná číslem 125 a při každém vygenerování čísla se zvýší o 25. Vzhledem k tomu, že se sekvence konfiguruje tak, aby cyklická hodnota překročila maximální hodnotu 200, sekvence se restartuje s minimální hodnotou 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  

Následující příklad změní sekvenci TestSeq tak, aby měla rozsah od 50 do 200. Sekvence restartuje číslování s číslem 100 a zvýší o 50 při každém vygenerování čísla.

ALTER SEQUENCE Test. TestSeq  
    RESTART WITH 100  
    INCREMENT BY 50  
    MINVALUE 50  
    MAXVALUE 200  
    NO CYCLE  
    NO CACHE  
;  
GO  

Vzhledem k tomu, že sekvence nebude cyklický, funkce NEXT HODNOTA FOR způsobí chybu, když sekvence překročí 200.

B. Restartování sekvence

Následující příklad vytvoří sekvenci s názvem CountBy1. Sekvence používá výchozí hodnoty.

CREATE SEQUENCE Test.CountBy1 ;  

Pokud chcete vygenerovat sekvenci hodnotu, vlastník potom spustí následující příkaz:

SELECT NEXT VALUE FOR Test.CountBy1  

Vrácená hodnota -9 223 372 036 854 775 808 je nejnižší možnou hodnotou pro datový typ bigint. Vlastník si uvědomuje, že chtěl, aby sekvence začínala 1, ale neindikovala START WITH klauzule při vytváření sekvence. Pokud chcete tuto chybu opravit, vlastník provede následující příkaz.

ALTER SEQUENCE Test.CountBy1 RESTART WITH 1 ;  

Potom vlastník znovu spustí následující příkaz a vygeneruje pořadové číslo.

SELECT NEXT VALUE FOR Test.CountBy1;  

Číslo je teď 1 podle očekávání.

Sekvence CountBy1 byla vytvořena pomocí výchozí hodnoty NO CYCLE, takže přestane fungovat po vygenerování čísla 9 223 372 036 854 775 807. Další volání sekvenčního objektu vrátí chybu 11728. Následující příkaz změní sekvenční objekt na cyklus a nastaví mezipaměť 20.

ALTER SEQUENCE Test.CountBy1  
    CYCLE  
    CACHE 20 ; 

Když teď sekvenční objekt dosáhne 9 223 372 036 854 775 807, bude cyklický a dalším číslem po kole bude minimální datový typ -9 223 372 036 854 775 808.

Vlastník si uvědomil, že bigint datový typ používá při každém použití 8 bajtů. Datový typ int, který používá 4 bajty, stačí. Datový typ sekvenčního objektu však nelze změnit. Pokud chcete změnit datový typ int, musí vlastník vynechat objekt sekvence a znovu vytvořit objekt se správným datovým typem.

Viz také

CREATE SEQUENCE (Transact-SQL)
DROP SEQUENCE (Transact-SQL)
DALŠÍ HODNOTA (Transact-SQL)
pořadových čísel
sp_sequence_get_range (Transact-SQL)