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.

 

--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;
Fumus

View Comments

Share
Published by
Fumus

Recent Posts

SQL Server 2019 – static data masking – Du Opfer!

In SQL Server 2016 wurde das sog. dynamic data masking eingeführt. Eine Möglichkeit Daten bei…

5 Jahren ago

MinRole – Oder wie alles etwas einfacher wird

Seit Sharepoint Server 2007 präsentiert sich die Installation immer auf die gleiche Weise. Gerade mal,…

8 Jahren ago

Schritt für Schritt: SQL 2016 – Dynamic Data Masking

Es weihnachtet! Gerade bekam ich von einer Kollegin Plätzchen angeboten mit der Größe eines Diskus…

8 Jahren ago

Schritt für Schritt: SQL Server 2016 – temporal tables

Nein, bitte nicht verwechseln: temporal tables haben nichts zu tun mit temporary tables table variables…

9 Jahren ago

SQL Server 2016 Schritt für Schritt–Installation und First Look

SQL Server 2016.. habe ich schon erwähnt, dass ich den ziemlich cool finde? Wollen wir…

9 Jahren ago

SQL Server 2016 – CTP2

Nach langer Zeit wieder mal eine Artikel von mir.. der mich besonders erfreut. SQL Server…

9 Jahren ago