Neue T-SQL Funktionen im SQL Server 2012 (Teil 1/4)

30. Januar 2012

Die nächste Version des SQL-Servers bringt auch eine Hand voll neuer T-SQL Funktionen.

Im ersten Artikel einer Serie möchte ich die neue Funktion “SEQUENCE” vorstellen.

Eine Sequence ist ein benutzerdefiniertes Objekt, das eine definierte Zahlenfolge erzeugen kann. Diese funktioniert wie die IDENTITY Funktion mit einem Startwert und dem Inkrement. Ein neuer Wert wird mit NEXT VALUE FOR erzeugt. Damit könnte z.B. ein fortlaufender Wert über mehrere Tabellen hinweg erzeugt werden.

Hier ein kleines Beispiel:

/****** Sequence Object erzeugen ******/ 
CREATE SEQUENCE [dbo].[SequenceBeispiel]
START WITH 1000
INCREMENT BY 1
MAXVALUE 5000000;

Die Metadaten der Sequence werden in der System Tabelle sys.sequences abgelegt und können nun in Abfragen verwendet werden.

/****** Tabelle erstellen******/ 
DECLARE @Produkt TABLE
(
ID int NOT NULL PRIMARY KEY,
Name nvarchar(100) NOT NULL
);

/****** Daten erzeugen ******/
INSERT @Produkt (ID, Name) VALUES
(NEXT VALUE FOR SequenceBeispiel, 'Produkt A'),
(NEXT VALUE FOR SequenceBeispiel, 'Produkt B'),
(NEXT VALUE FOR SequenceBeispiel, 'Produkt C');
/****** Show the Data ******/
SELECT * FROM @Produkt;

Und hier das Ergebnis der Abfrage:

ID FullName 
1001 Produkt A
1002 Produkt B
1003 Produkt C

Eine SEQUENCE kann auch modifiziert werden um z.B. den Zähler zurück zu setzen:

ALTER SEQUENCE dbo.foo
RESTART WITH 20

Wichtig ist auch, daß eine SEQUENCE nicht transaktional konsistent ist. Das bedeutet mit einem Rollback werden nicht die bereits verbrauchten Werte zurück gerollt!

 

Im nächsten Teil der Serie erläutere ich welche neuen Datums- und Zeitfunktionen im SQL Server 2012 hinzugekommen sind.