SQL Server: Sekvenser (Autonummer)

Skapa sekvens

Du kanske vill skapa en sekvens i SQL Server för att hantera ett autonummerfält.

Syntax

Syntaxen för att skapa en sekvens i SQL Server (Transact-SQL) är:

CREATE SEQUENCE sequence_name ;

AS datatype Det kan vara BIGINT, INT, TINYINT, SMALLINT, DECIMAL eller NUMERIC. Om datatype inte anges kommer sekvensen som standard att vara en BIGINT-datatype. START WITH value Det startvärde som sekvensen returnerar initialt. INCREMENT BY value Det kan vara antingen ett positivt eller negativt värde. Om ett positivt värde anges kommer sekvensen att vara en stigande sekvens av värden. Om ett negativt värde anges kommer sekvensen att vara en fallande sekvens av värden. MINVALUE värde Det lägsta tillåtna värdet för sekvensen. NO MINVALUE Det betyder att det inte finns något minsta värde angivet för sekvensen. MAXVALUE värde Det högsta tillåtna värdet för sekvensen. NO MAXVALUE Det betyder att det inte finns något maximalt värde angivet för sekvensen. CYCLE Innebär att sekvensen börjar om när den har avslutats. NO CYCLE Innebär att sekvensen kommer att ge upphov till ett fel när den har slutfört sekvensen. Den kommer inte att starta om sekvensen igen. CACHE-värde Den lagrar sekvensnumren i cacheminnet för att minimera disk-IO. NO CACHE Sekvensnumren lagras inte i cacheminnet.

Exempel

Låt oss titta på ett exempel på hur man skapar en sekvens i SQL Server (Transact-SQL).

Till exempel:

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

Detta skulle skapa ett sekvensobjekt som heter contacts_seq. Det första sekvensnumret som används är 1 och varje efterföljande nummer ökas med 1 (dvs. 2,3,4,…}. Upp till 10 värden kommer att lagras i cacheminnet för att förbättra prestandan. Det maximala värdet som sekvensnumret kan vara är 99999 och sekvensen kommer inte att cykla när det maximala värdet är uppnått.

Så du kan förenkla CREATE SEQUENCE-anvisningen på följande sätt:

CREATE SEQUENCE contacts_seq START WITH 1 INCREMENT BY 1;

Nu när du har skapat ett sekvensobjekt för att simulera ett autonummerfält ska vi ta reda på hur du hämtar ett värde från det här sekvensobjektet. För att hämta nästa värde i sekvensordningen måste du använda kommandot NEXT VALUE FOR.

Till exempel:

SELECT NEXT VALUE FOR contacts_seq;

Detta skulle hämta nästa värde från contacts_seq. Nästaval-kommandot måste användas i ett SQL-kommando. Till exempel:

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

Detta INSERT-meddelande skulle infoga en ny post i tabellen contacts. Fältet contact_id skulle tilldelas nästa nummer från sekvensen contacts_seq. Fältet last_name skulle sättas till ”Smith”.

Lämna ett svar

Din e-postadress kommer inte publiceras.