SQL Server 2012 – Sequences

 

Eine Neuerung, aber keine neue Erfindung, sind Sequences. Bei Oracle oder DB2 schon lang zu haben, werden diese erst in Denali SQL 11 eingeführt.

Sequenzen stellen eine Möglichkeit dar Zahlenreihen unabhängig (auch ausserhalb von Tabellen) transaktional zu erzeugen.

Folgendes Beispiel soll dies erläutern:

 

Anlegen der Sequence

--anlegen der Sequence
create sequence KD_SQL
go

Die Sequenzen können dabei mit verschiedensten Optionen erstellt werden:

  • Vorgabe des Min. oder Max Wertes
  • Zyklische sich wiederholende IDs
  • Inkrement
  • usw.

image

 

--Standardmäßig wird int mit Startwert: -2147483648 und Inkrement 1 vorgegeben
select name, minimum_value, maximum_value, increment,* from  sys.sequences

--Alternativ kann der Inkrement auch selbst vorgegeben werden
create sequence KD_SEQ2 as smallint
    start with 0
    increment by 1

--der nächste kann so abgefragt werden
Select next value for kd_seq

--und erhöht den Inkrement
select next value for KD_SEQ2
go 3

image

 

Verwendung von Sequences

 

Für die Verwendung von Sequences wird hier eine Demotabelle “Kunden” mit einem PK erstellt. Auf den Inkrementwert wird verzichtet. Dieser soll von der Sequence bedient werden.

--Demotabelle für Kunden
create table kunden
    (
    kdid smallint not null primary key,
    Nachname varchar(50),
    etc varchar(50)
    )


insert into kunden (kdid, Nachname, etc)
    values
        (next value FOR KD_Seq2, 'Maier', 'xy'),
        (next value FOR KD_Seq2, 'Schmitt', 'xx'),
        (next value FOR KD_Seq2, 'Müller', 'zz')


select * from kunden

image

 

Arbeiten mit Variablen und Sequences

 

--Auch das Zuweisen zu einer Variablen ist möglich
declare @nextVal int = Next Value for kd_seq2
select @nextVal

 

Verwendung zyklischer Sequences

 

--zyklische Sequenzen..hier von 0 bis 5
create sequence Cycle_SEQ as tinyint
    Start with 0
    increment by 1
    minvalue 0
    maxvalue 5 --5
    cycle; -- !

--hinzufügen einer neunen Spalte für die wiederholende Sequenz
alter table kunden add KatID smallint;
go 

update kunden set KatID = next value for cycle_SEQ

select * from kunden

image

 

Restarten von Sequences

 

Sofern es mal nötig sein sollten, können Sequences auch restartet werden. Optional sogar mit neuem Startwert.

--Sequenze restarten.. auch ab bestimmter Stelle
Alter sequence KD_SEQ2 restart --with 100;
Author: Fumus

1 thought on “SQL Server 2012 – Sequences

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert