Tout savoir sur SEQUENCE avec SQL Server 2012

Utilisation de SEQUENCE avec les transactions

Essayons le lot de requête suivant :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
INSERT  INTO dbo.test_default_constraint_with_sequence (un_caractere)
VALUES  ('F'), ('G'), ('H'), ('I'), ('J')
 
BEGIN TRANSACTION
 
        INSERT  INTO dbo.test_default_constraint_with_sequence (un_caractere)
        VALUES  ('K'), ('L'), ('M')
 
ROLLBACK TRANSACTION
 
INSERT  INTO dbo.test_default_constraint_with_sequence (un_caractere)
VALUES  ('N'), ('O'), ('P'), ('Q'), ('R')
GO
 
SELECT  name
        , current_value
FROM    sys.sequences
WHERE   name = 'ma_sequence_tinyint'

On sait que la dernière valeur générée par la SEQUENCE nommée dbo.ma_sequence_tinyint est 15.
Après l’exécution de ce lot, la SEQUENCE devrait avoir comme valeur courante 25 si SEQUENCE supporte les transactions, et 28 dans le cas inverse :

Donc le ROLLBACK n’a pas annulé les incrémentations générées par l’INSERT explicitement transactionné.
On ne pourra donc pas se servir de SEQUENCE si l’on a besoin, par exemple, d’ordonner des messages dans une queue en leur attribuant un numéro dans le cas où les « trous » ne sont pas possibles. Cela dit, c’est un fonctionnement tout à faire similaire à l’utilisation d’une colonne de type entier avec la propriété d’auto-incrémentation IDENTITY.

Laisser un commentaire