Obtenir une plage de valeurs entières séquentielles
Dans le cas où l’on a besoin d’obtenir une plage de valeurs séquentielles à partir d’une SEQUENCE, il n’est pas besoin de faire plusieurs fois appel à NEXT VALUE, ni même de spécifier un WHILE : la procédure stockée système sys.sp_sequence_get_range est là pour cela. Cependant il y a plusieurs aspects déplaisants :
Avec l’implémentation actuelle, je ne vois pas de cas où il serait intéressant d’utiliser cette procédure stockée dans un module T-SQL. En revanche la visée est peut-être exclusivement aux applications, que l’on peut programmer pour distribuer les valeurs dans le code.
Voici un petit exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | CREATE SEQUENCE range_sequence AS int MINVALUE 1 MAXVALUE 5 CYCLE CACHE 10 GO DECLARE @first_value sql_variant , @last_value sql_variant EXEC sys.sp_sequence_get_range @sequence_name = 'range_sequence' , @range_size = 12 , @range_first_value = @first_value OUTPUT , @range_last_value = @last_value OUTPUT SELECT CAST(@first_value AS int) AS first_value , CAST(@last_value AS int) AS last_value , NEXT VALUE FOR range_sequence AS next_value GO |