Delen via


ALTER SEQUENCE (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Hiermee wijzigt u de argumenten van een bestaand reeksobject. Als de reeks is gemaakt met de optie CACHE, wordt de cache opnieuw gemaakt door de reeks te wijzigen.

Reeksobjecten worden gemaakt met behulp van de instructie CREATE SEQUENCE. Reeksen zijn geheel getalwaarden en kunnen van elk gegevenstype zijn dat een geheel getal retourneert. Het gegevenstype kan niet worden gewijzigd met de instructie ALTER SEQUENCE. Als u het gegevenstype wilt wijzigen, zet u het reeksobject neer en maakt u het.

Een reeks is een door de gebruiker gedefinieerd schemagebonden object dat een reeks numerieke waarden genereert volgens een specificatie. Nieuwe waarden worden gegenereerd op basis van een reeks door de functie NEXT VALUE FOR aan te roepen. Gebruik sp_sequence_get_range om meerdere volgnummers tegelijk op te halen. Zie Reeksnummersvoor informatie en scenario's die zowel CREATE SEQUENCE, sp_sequence_get_rangeals de functie NEXT VALUE FOR gebruiken.

Transact-SQL syntaxisconventies

Syntaxis

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

Argumenten

sequence_name
Hiermee geeft u de unieke naam op waarmee de reeks bekend is in de database. Type is sysname.

OPNIEUW OPSTARTEN [ MET <constante> ]
De volgende waarde die wordt geretourneerd door het reeksobject. Indien opgegeven, moet de waarde RESTART WITH een geheel getal zijn dat kleiner is dan of gelijk is aan het maximum en groter dan of gelijk aan de minimumwaarde van het reeksobject. Als de WITH-waarde wordt weggelaten, wordt de volgnummering opnieuw gestart op basis van de oorspronkelijke OPTIES VOOR CREATE SEQUENCE.

INCREMENT BY <constant>
De waarde die wordt gebruikt voor het verhogen (of verlagen indien negatief) van de basiswaarde van het reeksobject voor elke aanroep naar de functie NEXT VALUE FOR. Als de increment een negatieve waarde is, is het reeksobject aflopend, anders is het oplopend. De verhoging kan niet 0 zijn.

[ MINVALUE <constante> | NO MINVALUE ]
Hiermee geeft u de grenzen voor het reeksobject. Als ER GEEN MINVALUE is opgegeven, wordt de minimum mogelijke waarde van het gegevenstype van de reeks gebruikt.

[ MAXVALUE <constante> | GEEN MAXVALUE
Hiermee geeft u de grenzen voor het reeksobject. Als ER GEEN MAXVALUE is opgegeven, wordt de maximaal mogelijke waarde van het gegevenstype van de reeks gebruikt.

[ CYCLUS | GEEN CYCLUS ]
Deze eigenschap geeft aan of het reeksobject opnieuw moet worden opgestart vanaf de minimumwaarde (of maximum voor aflopende reeksobjecten) of een uitzondering genereert wanneer de minimum- of maximumwaarde wordt overschreden.

Notitie

Na het fietsen is de volgende waarde de minimum- of maximumwaarde, niet de BEGINWAARDE van de reeks.

[ CACHE [<constante> ] | GEEN CACHE ]
Verhoogt de prestaties voor toepassingen die gebruikmaken van reeksobjecten door het aantal IO's te minimaliseren dat nodig is om gegenereerde waarden voor de systeemtabellen te behouden.

Zie CREATE SEQUENCE (Transact-SQL)voor meer informatie over het gedrag van de cache.

Opmerkingen

Zie CREATE SEQUENCE (Transact-SQL)voor meer informatie over hoe reeksen worden gemaakt en hoe de reekscache wordt beheerd.

De MINVALUE voor oplopende reeksen en de MAXVALUE voor aflopende reeksen kan niet worden gewijzigd in een waarde die de BEGIN-MET-waarde van de reeks niet toestaat. Als u de MINVALUE van een oplopende reeks wilt wijzigen in een getal dat groter is dan de WAARDE BEGIN MET of als u de MAXVALUE van een aflopende reeks wilt wijzigen in een getal dat kleiner is dan de waarde BEGINNEN MET, neemt u het argument OPNIEUW OPSTARTEN MET op om de reeks opnieuw te starten op een gewenst punt dat binnen het minimum- en maximumbereik valt.

Metagegevens

Voor informatie over reeksen voert u een query uit sys.sequences.

Veiligheid

Machtigingen

Vereist machtiging ALTER voor de reeks of ALTER machtiging voor het schema. Als u ALTER machtiging wilt verlenen voor de reeks, gebruikt u ALTER ON OBJECT in de volgende indeling:

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

Het eigendom van een reeksobject kan worden overgedragen met behulp van de instructie ALTER AUTHORIZATION.

Audit

Als u ALTER SEQUENCE-wilt controleren, controleert u de SCHEMA_OBJECT_CHANGE_GROUP.

Voorbeelden

Zie Reeksnummersvoor voorbeelden van het maken van reeksen en het gebruik van de functie VOLGENDE WAARDE VOOR om reeksnummers te genereren.

Een. Een reeks wijzigen

In het volgende voorbeeld wordt een schema gemaakt met de naam Test en een reeks met de naam TestSeq met behulp van het gegevenstype, met een bereik van 100 tot 200. De reeks begint met 125 en wordt met 25 verhoogd telkens wanneer een getal wordt gegenereerd. Omdat de reeks zodanig is geconfigureerd dat de cyclus wordt uitgevoerd wanneer de waarde groter is dan de maximumwaarde van 200, wordt de reeks opnieuw opgestart op de minimumwaarde van 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  

In het volgende voorbeeld wordt de TestSeq-reeks gewijzigd in een bereik van 50 tot 200. De reeks start de nummerreeks opnieuw op met 100 en wordt met 50 verhoogd telkens wanneer een getal wordt gegenereerd.

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

Omdat de reeks niet wordt gecyclusd, resulteert de functie VOLGENDE WAARDE VOOR in een fout wanneer de reeks groter is dan 200.

B. Een reeks opnieuw starten

In het volgende voorbeeld wordt een reeks gemaakt met de naam CountBy1. De reeks maakt gebruik van de standaardwaarden.

CREATE SEQUENCE Test.CountBy1 ;  

Als u een reekswaarde wilt genereren, voert de eigenaar vervolgens de volgende instructie uit:

SELECT NEXT VALUE FOR Test.CountBy1  

De waarde die wordt geretourneerd van -9.223.372.036.854.775.808 is de laagst mogelijke waarde voor het bigint gegevenstype. De eigenaar realiseert zich dat de reeks moet beginnen met 1, maar heeft niet aangegeven dat de START WITH component bij het maken van de reeks. Om deze fout te corrigeren, voert de eigenaar de volgende instructie uit.

ALTER SEQUENCE Test.CountBy1 RESTART WITH 1 ;  

Vervolgens voert de eigenaar de volgende instructie opnieuw uit om een volgnummer te genereren.

SELECT NEXT VALUE FOR Test.CountBy1;  

Het getal is nu 1, zoals verwacht.

De countBy1-reeks is gemaakt met de standaardwaarde NO CYCLE, zodat deze stopt na het genereren van het getal 9.223.372.036.854.775.807. Volgende aanroepen naar het reeksobject retourneren fout 11728. Met de volgende instructie wordt het reeksobject gewijzigd om te fietsen en wordt een cache van 20 ingesteld.

ALTER SEQUENCE Test.CountBy1  
    CYCLE  
    CACHE 20 ; 

Wanneer het reeksobject nu 9.223.372.036.854.775.807 bereikt, wordt het volgende getal na het fietsen het minimum van het gegevenstype -9.223.372.036.854.775.808.

De eigenaar besefte dat de bigint gegevenstype 8 bytes gebruikt telkens wanneer het wordt gebruikt. Het gegevenstype dat 4 bytes gebruikt, is voldoende. Het gegevenstype van een reeksobject kan echter niet worden gewijzigd. Als u wilt overschakelen naar een gegevenstype, moet de eigenaar het reeksobject verwijderen en het object opnieuw maken met het juiste gegevenstype.

Zie ook

CREATE SEQUENCE (Transact-SQL)
DROP SEQUENCE (Transact-SQL)
VOLGENDE WAARDE VOOR (Transact-SQL)
reeksnummers
sp_sequence_get_range (Transact-SQL)