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.
--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
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
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
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;
1 thought on “SQL Server 2012 – Sequences”