ALTER SEQUENCE (Transact-SQL)
gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Ändrar argumenten för ett befintligt sekvensobjekt. Om sekvensen skapades med alternativet CACHE återskapas cachen genom att ändra sekvensen.
Sekvensobjekt skapas med hjälp av instruktionen CREATE SEQUENCE. Sekvenser är heltalsvärden och kan vara av valfri datatyp som returnerar ett heltal. Det går inte att ändra datatypen med alter sequence-instruktionen. Om du vill ändra datatypen släpper du och skapar sekvensobjektet.
En sekvens är ett användardefinierat schemabundet objekt som genererar en sekvens med numeriska värden enligt en specifikation. Nya värden genereras från en sekvens genom att funktionen NEXT VALUE FOR anropas. Använd sp_sequence_get_range för att hämta flera sekvensnummer samtidigt. Information och scenarier som använder både CREATE SEQUENCE, sp_sequence_get_rangeoch funktionen NEXT VALUE FOR finns i Sekvensnummer.
Transact-SQL syntaxkonventioner
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 } ]
[ ; ]
Argument
sequence_name
Anger det unika namn med vilket sekvensen är känd i databasen. Typen är sysname.
STARTA OM [ MED <konstant> ]
Nästa värde som returneras av sekvensobjektet. Om det tillhandahålls måste värdet RESTART WITH vara ett heltal som är mindre än eller lika med maxvärdet och större än eller lika med det minsta värdet för sekvensobjektet. Om WITH-värdet utelämnas startas sekvensnumreringen om baserat på de ursprungliga CREATE SEQUENCE-alternativen.
ÖKA MED <konstant>
Det värde som används för att öka (eller minska om det är negativt) sekvensobjektets basvärde för varje anrop till funktionen NEXT VALUE FOR. Om inkrementet är ett negativt värde är sekvensobjektet fallande, annars är det stigande. Inkrementet kan inte vara 0.
[ MINVALUE <konstant> | INGEN MINVALUE ]
Anger gränserna för sekvensobjektet. Om NO MINVALUE anges används det minsta möjliga värdet för sekvensdatatypen.
[ MAXVALUE <konstant> | NO MAXVALUE
Anger gränserna för sekvensobjektet. Om NO MAXVALUE anges används det högsta möjliga värdet för sekvensdatatypen.
[ CYCLE | INGEN CYKEL ]
Den här egenskapen anger om sekvensobjektet ska startas om från minimivärdet (eller maxvärdet för fallande sekvensobjekt) eller utlöser ett undantag när dess lägsta eller högsta värde överskrids.
Not
När du har cyklat är nästa värde det lägsta eller högsta värdet, inte startvärdet för sekvensen.
[ CACHE [<konstant> ] | INGEN CACHE ]
Ökar prestandan för program som använder sekvensobjekt genom att minimera antalet IO:er som krävs för att bevara genererade värden i systemtabellerna.
Mer information om cachens beteende finns i CREATE SEQUENCE (Transact-SQL).
Anmärkningar
Information om hur sekvenser skapas och hur sekvenscachen hanteras finns i CREATE SEQUENCE (Transact-SQL).
MINVALUE för stigande sekvenser och MAXVALUE för fallande sekvenser kan inte ändras till ett värde som inte tillåter START WITH-värdet för sekvensen. Om du vill ändra MINVALUE för en stigande sekvens till ett tal som är större än värdet START MED eller för att ändra MAXVALUE för en fallande sekvens till ett tal som är mindre än START MED-värdet, inkluderar du argumentet RESTART WITH för att starta om sekvensen vid en önskad punkt som ligger inom minimi- och maxintervallet.
Metadata
För information om sekvenser, fråga sys.sequences.
Säkerhet
Behörigheter
Kräver ALTER- behörighet för sekvensen eller ALTER- behörighet i schemat. Om du vill ge ALTER- behörighet i sekvensen använder du ALTER ON OBJECT i följande format:
GRANT ALTER ON OBJECT::Test.TinySeq TO [AdventureWorks\Larry]
Ägarskapet för ett sekvensobjekt kan överföras med hjälp av instruktionen ALTER AUTHORIZATION.
Revision
Om du vill granska ALTER SEQUENCEövervakar du SCHEMA_OBJECT_CHANGE_GROUP.
Exempel
Exempel på hur du både skapar sekvenser och använder funktionen NÄSTA VÄRDE FÖR för att generera sekvensnummer finns i Sekvensnummer.
A. Ändra en sekvens
I följande exempel skapas ett schema med namnet Test och en sekvens med namnet TestSeq med hjälp av int datatyp med ett intervall mellan 100 och 200. Sekvensen börjar med 125 och ökar med 25 varje gång ett tal genereras. Eftersom sekvensen är konfigurerad att cykla, när värdet överskrider det maximala värdet på 200, startas sekvensen om med minimivärdet 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
I följande exempel ändras TestSeq-sekvensen så att den har ett intervall från 50 till 200. Sekvensen startar om numreringsserien med 100 och ökar med 50 varje gång ett tal genereras.
ALTER SEQUENCE Test. TestSeq
RESTART WITH 100
INCREMENT BY 50
MINVALUE 50
MAXVALUE 200
NO CYCLE
NO CACHE
;
GO
Eftersom sekvensen inte kommer att cykla resulterar funktionen NEXT VALUE FOR i ett fel när sekvensen överskrider 200.
B. Starta om en sekvens
I följande exempel skapas en sekvens med namnet CountBy1. Sekvensen använder standardvärdena.
CREATE SEQUENCE Test.CountBy1 ;
För att generera ett sekvensvärde kör ägaren sedan följande instruktion:
SELECT NEXT VALUE FOR Test.CountBy1
Värdet som returneras på -9 223 372 036 854 775 808 är det lägsta möjliga värdet för bigint- datatyp. Ägaren inser att de ville att sekvensen skulle börja med 1, men angav inte START MED-satsen när de skapade sekvensen. För att åtgärda det här felet kör ägaren följande instruktion.
ALTER SEQUENCE Test.CountBy1 RESTART WITH 1 ;
Sedan kör ägaren följande instruktion igen för att generera ett sekvensnummer.
SELECT NEXT VALUE FOR Test.CountBy1;
Talet är nu 1, som förväntat.
CountBy1-sekvensen skapades med standardvärdet NO CYCLE så att den slutar fungera efter att ha genererat nummer 9 223 372 036 854 775 807. Efterföljande anrop till sekvensobjektet returnerar fel 11728. Följande instruktion ändrar sekvensobjektet till cykel och anger ett cacheminne på 20.
ALTER SEQUENCE Test.CountBy1
CYCLE
CACHE 20 ;
Nu när sekvensobjektet når 9 223 372 036 854 775 807 kommer det att cykla, och nästa nummer efter cyklingen kommer att vara minst av datatypen - 9 223 372 036 854 775 808.
Ägaren insåg att bigint- datatyp använder 8 byte varje gång den används. int datatyp som använder 4 byte räcker. Datatypen för ett sekvensobjekt kan dock inte ändras. Om du vill ändra till en int datatyp måste ägaren släppa sekvensobjektet och återskapa objektet med rätt datatyp.
Se även
CREATE SEQUENCE (Transact-SQL)
DROP SEQUENCE (Transact-SQL)
NÄSTA VÄRDE FÖR (Transact-SQL)
sekvensnummer
sp_sequence_get_range (Transact-SQL)