SQL Server: Sequences (Autonumber)

Skab sekvens

Du ønsker måske at oprette en sekvens i SQL Server for at håndtere et autonummerfelt.

Syntaks

Syntaksen for at oprette en sekvens i SQL Server (Transact-SQL) er:

CREATE SEQUENCE sequence_name ;

AS datatype Det kan være BIGINT, INT, TINYINT, SMALLINT, DECIMAL eller NUMERIC. Hvis datatype ikke er angivet, vil sekvensen som standard være en BIGINT-datatype. START WITH value Den startværdi, som sekvensen returnerer initialt. INCREMENT BY value Det kan være enten en positiv eller negativ værdi. Hvis der angives en positiv værdi, vil sekvensen være en opstigende sekvens af værdier. Hvis der er angivet en negativ værdi, vil sekvensen være en faldende sekvens af værdier. MINVALUE-værdi Den mindste værdi, der er tilladt for sekvensen. NO MINVALUE Det betyder, at der ikke er angivet nogen minimumsværdi for sekvensen. MAXVALUE-værdi Den maksimale værdi, der er tilladt for sekvensen. NO MAXVALUE Det betyder, at der ikke er angivet nogen maksimal værdi for sekvensen. CYCLE Det betyder, at sekvensen starter forfra, når den har afsluttet sekvensen. NO CYCLE Det betyder, at sekvensen giver anledning til en fejl, når den har afsluttet sekvensen. Den vil ikke starte sekvensen forfra igen. CACHE-værdi Den gemmer sekvensnumrene i cache for at minimere disk IO. NO CACHE Den gemmer ikke sekvensnumrene i cache.

Eksempel

Lad os se på et eksempel på, hvordan man opretter en sekvens i SQL Server (Transact-SQL).

For eksempel:

CREATE SEQUENCE contacts_seq AS BIGINT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 99999 NO CYCLE CACHE 10;

Dette ville oprette et sekvensobjekt kaldet contacts_seq. Det første sekvensnummer, som den ville bruge, er 1, og hvert efterfølgende nummer ville stige med 1 (dvs.: 2,3,4,…}. Det vil cache op til 10 værdier af hensyn til ydeevnen. Den maksimale værdi, som sekvensnummeret kan være, er 99999, og sekvensen vil ikke cykle, når dette maksimum er nået.

Så du kan forenkle din CREATE SEQUENCE-anvisning som følger:

CREATE SEQUENCE contacts_seq START WITH 1 INCREMENT BY 1;

Nu, hvor du har oprettet et sekvensobjekt for at simulere et autonummerfelt, vil vi gennemgå, hvordan du henter en værdi fra dette sekvensobjekt. Hvis du vil hente den næste værdi i sekvensrækkefølgen, skal du bruge kommandoen NEXT VALUE FOR.

Til eksempel:

SELECT NEXT VALUE FOR contacts_seq;

Dette ville hente den næste værdi fra contacts_seq. Anvisningen nextval skal bruges i en SQL-anvisning. For eksempel:

INSERT INTO contacts(contact_id, last_name)VALUES(NEXT VALUE FOR contacts_seq, 'Smith');

Denne INSERT-anvisning ville indsætte en ny post i tabellen contacts. Feltet contact_id ville blive tildelt det næste nummer fra contacts_seq-sekvensen. Feltet last_name ville blive sat til “Smith”.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.