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.