SQL Server 2012 Transact SQL új funkciók – Sequence

“Pár” új, régen várt funkcióval bővült a T-SQL nyelv az SQL Server 2012 verzióban. Mivel éppen aktuális a dolog, szeretnék párat bemutatni. Az első a Sequence azaz számsor, sorozat.

A legjobban az IDENTITY-hez lehet hasonlítani: amíg az IDENTITY egy tábla oszlopához rendlhető, addig a Sequence (számsor) több tábla több oszlopához rendelhető sorozatot tesz lehetővé.

Például:

Legyen két táblám, table1 és table2. Mindkét táblának legyen egy ID oszlopa int adattípussal, amit egy sorozatból szeretnék feltölteni. A sorozat kezdődjön egytől, majd kettesével növekedjen:

 1CREATE TABLE [dbo].[Table1]
 2(
 3    [ID] int NOT NULL,
 4    [Name] nvarchar(50) NULL
 5);
 6 
 7CREATE TABLE [dbo].[Table2]
 8(
 9    [ID] int NOT NULL,
10    [Name] nvarchar(50) NULL
11);
12GO

Majd létrehozom a számsort:

1CREATE SEQUENCE [dbo].[SampleSequence] AS int
2START WITH 1
3INCREMENT BY 2;
4GO

Ezek után hozzáadok sorokat (nem rekordokat 😁: Joe Celko’s SQL for Smarties Advanced SQL Programming):

1INSERT INTO [dbo].[Table1] ([ID], [Name]) VALUES (NEXT VALUE FOR [dbo].[SampleSequence], 'Test1');
2INSERT INTO [dbo].[Table2] ([ID], [Name]) VALUES (NEXT VALUE FOR [dbo].[SampleSequence], 'Test2');
3 
4INSERT INTO [dbo].[Table1] ([ID], [Name]) VALUES (NEXT VALUE FOR [dbo].[SampleSequence], 'Test3');
5INSERT INTO [dbo].[Table2] ([ID], [Name]) VALUES (NEXT VALUE FOR [dbo].[SampleSequence], 'Test4');

Majd az eredményt lekérdezem:

1SELECT * FROM [dbo].[Table1];
2SELECT * FROM [dbo].[Table2];

Ugye az elvárt eredmény a Sequence, számsor esetében az alábbi lesz:

Table1

IDName
1Test1
5Test3

Table2

IDName
3Test2
7Test4

Vannak további érdekes lehetőségek ezzel az újítással, amiket a BOL-ban, igen jó példákkal meg is lehet találni.