Denali : utiliser les séquences

Une des nouveautés attendues de SQL Server CodeName Denali, les séquences : un exemple simple

Les séquences sont de nouveaux objets de base de données qui vont nous permettre de gérer nos compteurs autrement qu'avec une colonne IDENTITY (comme cela existe déjà dans d'autres moteurs de bases de données)

Voici un exemple simple de l'utilisation de séquences.


-- Création de l'objet séquence :

USE SequenceDB 
GO
CREATE SEQUENCE dbo.compteur AS int START WITH 1 INCREMENT BY 1 MAXVALUE 5000000
GO

-- Création d'une table clients

CREATE TABLE Clients (NumClient int, NomClient varchar(50)); 
GO

-- Insertion dans la table clients (1000 lignes), ici on utilise la séquence avec NEXT VALUE pour initialiser la colonne NumClient

INSERT Clients (NumClient,NomClient) VALUES (NEXT VALUE FOR Compteur, 'Test de séquence') 
GO 1000

-- Vérifier ma table clients et ma séquence

select MAX(NumClient) from Clients 
GO
select name,current_value from sys.sequences
GO

-- Voir la prochaine valeur : avance la séquence

select next value for dbo.compteur 
GO

Essayons de voir comment cela se comporte avec des transactions :

TRUNCATE TABLE Clients 

-- Changer la valeur de départ

ALTER SEQUENCE dbo.Compteur RESTART with 50001;

-- Transaction validée :

INSERT Clients (NumClient, NomClient) VALUES (NEXT VALUE FOR Compteur, 'Test de séquence') 

-- Transaction annulée

BEGIN TRAN 
INSERT Clients (NumClient, NomClient) VALUES (NEXT VALUE FOR Compteur, 'Test de séquence')
INSERT Clients (NumClient, NomClient) VALUES (NEXT VALUE FOR Compteur, 'Test de séquence')
ROLLBACK TRAN

-- Transaction validée :

INSERT Clients
(NumClient, NomClient) VALUES (NEXT VALUE FOR Compteur, 'Test de séquence')

-- Il y a des trous

SELECT * from Clients