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 CACHE optie, 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 behulp van de ALTER SEQUENCE instructie. 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 aan te NEXT VALUE FOR roepen. Gebruik sp_sequence_get_range dit om meerdere volgnummers tegelijk op te halen. Zie Volgnummers voor informatie en scenario's die zowel CREATE SEQUENCE, sp_sequence_get_rangeals de NEXT VALUE FOR functie 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 RESTART WITH waarde 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 CREATE SEQUENCE opties.

INCREMENT BY-constante <>

De waarde die wordt gebruikt om de basiswaarde van het reeksobject voor elke aanroep naar de NEXT VALUE FOR functie te verhogen (of te verlagen als negatief). 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 NO MINVALUE dit 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 NO MAXVALUE dit is opgegeven, wordt de maximaal mogelijke waarde van het gegevenstype voor de reeks gebruikt.

[ CYCLUS | GEEN CYCLUS ]

Met deze eigenschap wordt aangegeven of het reeksobject opnieuw moet worden opgestart vanaf de minimumwaarde (of het 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 START VALUE reeks.

[ CACHE [ <constant> ] | 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 voor meer informatie over het gedrag van de cache.

Opmerkingen

Zie CREATE SEQUENCE voor 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 START WITH waarde van de reeks niet toestaat. Als u de MINVALUE oplopende reeks wilt wijzigen in een getal dat groter is dan de START WITH waarde of als u de MAXVALUE aflopende reeks wilt wijzigen in een getal dat kleiner is dan de START WITH waarde, neemt u het RESTART WITH argument 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.

Machtigingen

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

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

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

Audit

Om te controleren ALTER SEQUENCE, controleert u de SCHEMA_OBJECT_CHANGE_GROUP.

Voorbeelden

Zie Volgnummers voor voorbeelden van het maken van reeksen en het gebruik van de NEXT VALUE FOR functie om volgnummers 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 is geconfigureerd om te cyclusn, wordt de reeks opnieuw gestart op de minimumwaarde van 100 wanneer de waarde de maximumwaarde van 200 overschrijdt.

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 NEXT VALUE FOR functie 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 de component niet aangegeven START WITH toen ze de reeks maakten. 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 behulp van de standaardwaarde, NO CYCLE zodat deze stopt na het genereren van nummer 9.223.372.036.854.775.807. Volgende aanroepen naar het reeksobject retourneert 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 het 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.