Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Hiermee maakt u een reeksobject en geeft u de eigenschappen op. Een reeks is een door de gebruiker gedefinieerd schemagebonden object dat een reeks numerieke waarden genereert op basis van de specificatie waarmee de reeks is gemaakt. De reeks numerieke waarden wordt gegenereerd in een oplopende of aflopende volgorde met een gedefinieerd interval en kan worden geconfigureerd om opnieuw op te starten (cyclus) wanneer deze uitgeput is.
Reeksen, in tegenstelling tot identiteitskolommen, worden niet gekoppeld aan specifieke tabellen. Toepassingen verwijzen naar een reeksobject om de volgende waarde op te halen. De relatie tussen reeksen en tabellen wordt beheerd door de toepassing. Gebruikerstoepassingen kunnen verwijzen naar een reeksobject en de waarden in meerdere rijen en tabellen coördineren.
In tegenstelling tot waarden voor identiteitskolommen die worden gegenereerd wanneer rijen worden ingevoegd, kan een toepassing het volgende volgnummer verkrijgen zonder de rij in te voegen door de VOLGENDE WAARDE FOR aan te roepen. Gebruik sp_sequence_get_range om meerdere volgnummers tegelijk op te halen.
Zie Volgnummers voor informatie en scenario's die zowel CREATE SEQUENCE gebruikmaken van de functie als de NEXT VALUE FOR functie.
              
              
              Transact-SQL syntaxis-conventies
Syntaxis
CREATE SEQUENCE [ schema_name . ] sequence_name
    [ AS [ built_in_integer_type | user-defined_integer_type ] ]
    [ START WITH <constant> ]
    [ INCREMENT BY <constant> ]
    [ { MINVALUE [ <constant> ] } | { NO MINVALUE } ]
    [ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ]
    [ CYCLE | { NO CYCLE } ]
    [ { CACHE [ <constant> ] } | { NO CACHE } ]
    [ ; ]
Arguments
sequence_name
Hiermee geeft u de unieke naam op waarmee de reeks bekend is in de database. Type is sysname.
[ built_in_integer_type | user-defined_integer_type ]
Een reeks kan worden gedefinieerd als een geheel getaltype. De volgende typen zijn toegestaan.
- tinyint - Bereik 0 tot 255
 - smallint - Bereik -32.768 tot 32.767
 - int - Bereik -2.147.483.648 tot 2.147.483.647
 - bigint - Bereik -9.223.372.036.854.775.808 tot 9.223.372.036.854.775.807
 - decimaal en numeriek met een schaal van 0.
 - Elk door de gebruiker gedefinieerd gegevenstype (aliastype) dat is gebaseerd op een van de toegestane typen.
 
Als er geen gegevenstype wordt opgegeven, wordt het bigint-gegevenstype als standaard gebruikt.
BEGINNEN MET <constante>
De eerste waarde die wordt geretourneerd door het reeksobject. De START waarde moet een waarde zijn die kleiner is dan of gelijk is aan het maximum en groter dan of gelijk aan de minimumwaarde van het reeksobject. De standaardstartwaarde voor een nieuw reeksobject is de minimumwaarde voor een oplopend reeksobject en de maximumwaarde voor een aflopend reeksobject.
INCREMENT BY-constante <>
Waarde die wordt gebruikt om de waarde van het reeksobject voor elke aanroep naar de NEXT VALUE FOR functie te verhogen (of te verlagen als negatief). Als de verhoging een negatieve waarde is, is het reeksobject aflopend; anders is het oplopend. De verhoging kan niet 0 zijn. De standaardstap voor een nieuw reeksobject is 1.
[ MINVALUE-constante <> | NO MINVALUE ]
Hiermee geeft u de grenzen voor het reeksobject. De standaard minimumwaarde voor een nieuw reeksobject is de minimumwaarde van het gegevenstype van het reeksobject. Dit is nul voor het kleine gegevenstype en een negatief getal voor alle andere gegevenstypen.
[ MAXVALUE-constante <> | GEEN MAXVALUE
Hiermee geeft u de grenzen voor het reeksobject. De standaard maximumwaarde voor een nieuw reeksobject is de maximumwaarde van het gegevenstype van het reeksobject.
[ CYCLUS | GEEN CYCLUS ]
Eigenschap die aangeeft 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. De standaardcyclusoptie voor nieuwe reeksobjecten is NO CYCLE.
Opmerking
Het fietsen van een SEQUENCE herstart vanaf de minimum- of maximumwaarde, niet vanaf de beginwaarde.
[ CACHE [ <constant> ] | GEEN CACHE ]
Verhoogt de prestaties voor toepassingen die gebruikmaken van reeksobjecten door het aantal schijf-IO's te minimaliseren dat nodig is om reeksnummers te genereren. Standaardwaarde is CACHE.
Als er bijvoorbeeld een cachegrootte van 50 is gekozen, behoudt SQL Server niet 50 afzonderlijke waarden in de cache. Hiermee worden alleen de huidige waarde en de hoeveelheid waarden in de cache opgeslagen. Dit betekent dat de hoeveelheid geheugen die nodig is voor het opslaan van de cache altijd twee exemplaren van het gegevenstype van het reeksobject is.
Opmerking
Als de cacheoptie is ingeschakeld zonder een cachegrootte op te geven, selecteert de database-engine een grootte. Gebruikers moeten echter niet vertrouwen op een consistente selectie. Microsoft kan de methode voor het berekenen van de cachegrootte wijzigen zonder kennisgeving.
Bij het maken met de CACHE optie kan een onverwacht afsluiten (zoals een stroomstoring) leiden tot het verlies van reeksnummers die in de cache blijven.
Opmerkingen
Reeksnummers worden gegenereerd buiten het bereik van de huidige transactie. Ze worden verbruikt of de transactie met behulp van het volgnummer wordt doorgevoerd of teruggedraaid. Dubbele validatie vindt alleen plaats zodra een record volledig is ingevuld. Dit kan leiden tot sommige gevallen waarbij hetzelfde getal wordt gebruikt voor meer dan één record tijdens het maken, maar vervolgens wordt geïdentificeerd als een duplicaat. Als dit gebeurt en andere autonummeringswaarden zijn toegepast op volgende records, kan dit leiden tot een hiaat tussen autonummeringswaarden en wordt verwacht gedrag.
Cachebeheer
Om de prestaties te verbeteren, wordt in SQL Server het aantal reeksnummers vooraf toegewezen dat door het CACHE argument is opgegeven.
Er wordt bijvoorbeeld een nieuwe reeks gemaakt met een beginwaarde van 1 en een cachegrootte van 15. Wanneer de eerste waarde nodig is, worden de waarden 1 tot en met 15 beschikbaar gesteld vanuit het geheugen. De laatste waarde in de cache (15) wordt naar de systeemtabellen op de schijf geschreven. Wanneer alle 15 nummers worden gebruikt, wordt de volgende aanvraag (voor nummer 16) de cache opnieuw toegewezen. De nieuwe waarde voor het laatst in de cache (30) wordt naar de systeemtabellen geschreven.
Als de database-engine wordt gestopt nadat u 22 getallen hebt gebruikt, wordt het volgende beoogde volgnummer in het geheugen (23) naar de systeemtabellen geschreven, waarbij het eerder opgeslagen nummer wordt vervangen.
Nadat SQL Server opnieuw is opgestart en een volgnummer nodig is, wordt het beginnummer gelezen uit de systeemtabellen (23). De cachehoeveelheid van 15 getallen (23-38) wordt toegewezen aan het geheugen en het volgende niet-cachenummer (39) wordt naar de systeemtabellen geschreven.
Als de database-engine abnormaal stopt voor een gebeurtenis zoals een stroomstoring, wordt de reeks opnieuw opgestart met het nummer dat wordt gelezen uit systeemtabellen (39). Eventuele reeksnummers die zijn toegewezen aan het geheugen (maar nooit aangevraagd door een gebruiker of toepassing) gaan verloren. Deze functionaliteit kan hiaten achterlaten, maar garandeert dat dezelfde waarde nooit twee keer wordt uitgegeven voor één reeksobject, tenzij deze is gedefinieerd als CYCLE of handmatig opnieuw wordt opgestart.
De cache wordt in het geheugen onderhouden door de huidige waarde (de laatste uitgegeven waarde) en de hoeveelheid waarden in de cache bij te houden. Daarom is de hoeveelheid geheugen die door de cache wordt gebruikt altijd twee exemplaren van het gegevenstype van het reeksobject.
Als u het cacheargument instelt om de huidige reekswaarde naar de systeemtabellen te NO CACHE schrijven telkens wanneer een reeks wordt gebruikt. Dit kan de prestaties vertragen door de schijftoegang te vergroten, maar vermindert de kans op onbedoelde hiaten. Hiaten kunnen nog steeds optreden als getallen worden aangevraagd met behulp van de NEXT VALUE FOR of sp_sequence_get_range functies, maar de getallen worden niet gebruikt of worden gebruikt in niet-doorgevoerde transacties.
Wanneer een reeksobject gebruikmaakt van de CACHE optie, als u het reeksobject opnieuw opstart of de INCREMENTeigenschappen van MINVALUECYCLEMAXVALUEde cachegrootte wijzigt, wordt de cache naar de systeemtabellen geschreven voordat de wijziging plaatsvindt. Vervolgens wordt de cache opnieuw geladen vanaf de huidige waarde (dat wil gezegd, er worden geen getallen overgeslagen). Het wijzigen van de cachegrootte wordt onmiddellijk van kracht.
CACHE-optie wanneer waarden in cache beschikbaar zijn
Het volgende proces vindt plaats telkens wanneer een reeksobject wordt aangevraagd om de volgende waarde voor de CACHE optie te genereren als er ongebruikte waarden beschikbaar zijn in de cache in het geheugen voor het reeksobject.
- De volgende waarde voor het reeksobject wordt berekend.
 - De nieuwe huidige waarde voor het reeksobject wordt bijgewerkt in het geheugen.
 - De berekende waarde wordt geretourneerd naar de aanroepinstructie.
 
CACHE-optie wanneer de cache is uitgeput
Het volgende proces vindt plaats telkens wanneer een reeksobject wordt aangevraagd om de volgende waarde voor de CACHE optie te genereren als de cache is uitgeput:
De volgende waarde voor het reeksobject wordt berekend.
De laatste waarde voor de nieuwe cache wordt berekend.
De systeemtabelrij voor het reeksobject is vergrendeld en de waarde die in stap 2 (de laatste waarde) wordt berekend, naar de systeemtabel geschreven. Een uitgebreide gebeurtenis die uit de cache is uitgeput, wordt geactiveerd om de gebruiker op de hoogte te stellen van de nieuwe persistente waarde.
OPTIE GEEN CACHE
Het volgende proces vindt plaats telkens wanneer een reeksobject wordt aangevraagd om de volgende waarde voor de NO CACHE optie te genereren:
- De volgende waarde voor het reeksobject wordt berekend.
 - De nieuwe huidige waarde voor het reeksobject wordt naar de systeemtabel geschreven.
 - De berekende waarde wordt geretourneerd naar de aanroepinstructie.
 
Metagegevens
Voor informatie over reeksen voert u een query uit op sys.sequences.
Security
Permissions
Vereist CREATE SEQUENCE, ALTERof CONTROL toestemming voor de SCHEMA.
- Leden van de db_owner en db_ddladmin vaste databaserollen kunnen reeksobjecten maken, wijzigen en neerzetten.
 - Leden van de db_owner en db_datawriter vaste databaserollen kunnen reeksobjecten bijwerken door ze ertoe te brengen getallen te genereren.
 
Het volgende voorbeeld verleent de gebruiker AdventureWorks\Larry toestemming om reeksen in het Test schema te maken.
GRANT CREATE SEQUENCE
    ON SCHEMA::Test TO [AdventureWorks\Larry];
Het eigendom van een reeksobject kan worden overgedragen met behulp van de ALTER AUTHORIZATION instructie.
Als een reeks een door de gebruiker gedefinieerd gegevenstype gebruikt, moet de maker van de reeks machtigingen hebben REFERENCES voor het type.
Audit
Om te controleren CREATE 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.
De meeste van de volgende voorbeelden maken reeksobjecten in een schema met de naam Test.
Voer de volgende instructie uit om het testschema te maken.
CREATE SCHEMA Test;
GO
Eén. Een reeks maken die met 1 toeneemt
In het volgende voorbeeld wordt in Het volgende voorbeeld een reeks gemaakt met de naam CountBy1, die steeds met één toeneemt wanneer deze wordt gebruikt.
CREATE SEQUENCE Test.CountBy1
    START WITH 1
    INCREMENT BY 1;
GO
B. Een reeks maken die met 1 afneemt
Het volgende voorbeeld begint bij 0 en telt elke keer dat deze wordt gebruikt, in negatieve getallen op.
CREATE SEQUENCE Test.CountByNeg1
    START WITH 0
    INCREMENT BY -1;
GO
C. Een reeks maken die met 5 wordt verhoogd
In het volgende voorbeeld wordt een reeks gemaakt die met 5 wordt verhoogd telkens wanneer deze wordt gebruikt.
CREATE SEQUENCE Test.CountBy1
    START WITH 5
    INCREMENT BY 5;
GO
D. Een reeks maken die begint met een aangewezen getal
Nadat u een tabel hebt geïmporteerd, merkt Genomineerdy op dat het hoogste id-nummer 24.328 is. Eén reeks die getallen genereert vanaf 24.329. Met de volgende code wordt een reeks gemaakt die begint met 24.329 en met 1 wordt verhoogd.
CREATE SEQUENCE Test.ID_Seq
    START WITH 24329
    INCREMENT BY 1;
GO
E. Een reeks maken met standaardwaarden
In het volgende voorbeeld wordt een reeks gemaakt met behulp van de standaardwaarden.
CREATE SEQUENCE Test.TestSequence;
Voer de volgende instructie uit om de eigenschappen van de reeks weer te geven.
SELECT *
FROM sys.sequences
WHERE name = 'TestSequence';
Een gedeeltelijke lijst van de uitvoer toont de standaardwaarden.
| Uitvoer | Standaardwaarde | 
|---|---|
start_value | 
-9223372036854775808 | 
increment | 
1 | 
minimum_value | 
-9223372036854775808 | 
maximum_value | 
9223372036854775807 | 
is_cycling | 
0 | 
is_cached | 
1 | 
current_value | 
-9223372036854775808 | 
F. Een reeks maken met een specifiek gegevenstype
In het volgende voorbeeld wordt een reeks gemaakt met behulp van het gegevenstype smallint , met een bereik van -32.768 tot 32.767.
CREATE SEQUENCE SmallSeq
    AS SMALLINT;
G. Een reeks maken met alle argumenten
In het volgende voorbeeld wordt een reeks met de naam DecSeq gemaakt met behulp van het decimale gegevenstype, met een bereik van 0 tot 255. De reeks begint met 125 en wordt met 25 verhoogd telkens wanneer een getal wordt gegenereerd. Omdat de reeks zodanig is geconfigureerd dat deze wordt gecyclusd wanneer de waarde de maximumwaarde van 200 overschrijdt, wordt de reeks opnieuw opgestart op de minimumwaarde van 100.
CREATE SEQUENCE Test.DecSeq
    AS DECIMAL (3, 0)
    START WITH 125
    INCREMENT BY 25
    MINVALUE 100
    MAXVALUE 200
    CYCLE
    CACHE 3;
Voer de volgende instructie uit om de eerste waarde te zien; de START WITH optie 125.
SELECT  NEXT VALUE FOR Test.DecSeq;
Voer de instructie nog drie keer uit om 150, 175 en 200 te retourneren.
Voer de instructie opnieuw uit om te zien hoe de beginwaarde terug gaat naar de MINVALUE optie 100.
Voer de volgende code uit om de cachegrootte te bevestigen en de huidige waarde te bekijken.
SELECT cache_size, current_value
FROM sys.sequences
WHERE name = 'DecSeq';