Sdílet prostřednictvím


ALTEROVA SEKVENCE (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Upraví argumenty existujícího sekvenčního objektu. Pokud byla sekvence vytvořena s CACHE možností, 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 pomocí ALTER SEQUENCE příkazu změnit. 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 NEXT VALUE FOR funkce. Slouží sp_sequence_get_range k získání více pořadových čísel najednou. Informace a scénáře, které používají jak CREATE SEQUENCE, sp_sequence_get_rangetak NEXT VALUE FOR funkci, naleznete 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 [ S konstantou <> ]

Další hodnota vrácená sekvenčním objektem. Pokud je tato hodnota zadaná, RESTART WITH musí být celé číslo, které je menší nebo rovno maximální a větší nebo rovno minimální hodnotě objektu sekvence. WITH Pokud je hodnota vynechána, pořadové číslování se restartuje na základě původních CREATE SEQUENCE možností.

INCREMENT BY <konstantní>

Hodnota, která se používá k přírůstku (nebo dekrementace, pokud je záporná) základní hodnota sekvenčního objektu NEXT VALUE FOR pro každé volání funkce. 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 NO MINVALUE je zadána, použije se minimální možná hodnota sekvenčního datového typu.

[ MAXVALUE <konstanta> | NO MAXVALUE ]

Určuje hranice pro sekvenční objekt. Pokud NO MAXVALUE je zadána, použije se maximální možná hodnota datového typu sekvence.

[ 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 vyvolá 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 START VALUE 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.

Poznámky

Informace o vytváření sekvencí a o správě mezipaměti sekvencí naleznete v tématu CREATE SEQUENCE.

U MINVALUE vzestupných sekvencí a MAXVALUE sestupných sekvencí nelze změnit hodnotu, která nepovoluje START WITH hodnotu sekvence. Pokud chcete změnit MINVALUE vzestupnou sekvenci na číslo větší než START WITH hodnota nebo změnit MAXVALUE sestupnou sekvenci na číslo menší než START WITH hodnota, zahrňte RESTART WITH argument 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.

Dovolení

Vyžaduje ALTER oprávnění k sekvenci nebo ALTER oprávnění schématu. Pokud chcete udělit ALTER oprávnění k sekvenci, použijte ALTER ON OBJECT následující formát:

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

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

Audit

Pokud chcete auditovatALTER SEQUENCE, monitorujte SCHEMA_OBJECT_CHANGE_GROUP

Příklady

Příklady vytváření sekvencí i použití NEXT VALUE FOR funkce ke generová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 pořadí je nakonfigurováno na cyklus, když hodnota překročí 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 neproběhne cyklus, NEXT VALUE FOR výsledkem funkce je chyba, 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 zjistí, že chce, aby sekvence začínala 1, ale při vytváření sekvence neznačila START WITH klauzuli. 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 s použitím výchozí hodnoty NO CYCLE , takže přestane fungovat po vygenerování čísla 9 223 372 036 854 775 807. Následná 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 datový typ bigint 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.

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