sp_sequence_get_range (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Retourne une plage de valeurs de séquence d'un objet séquence. L'objet séquence génère et émet le nombre de valeurs demandées et fournit l'application avec les métadonnées relatives à la plage.

Pour plus d’informations sur les numéros de séquence, consultez Numéros de séquence.

Conventions de la syntaxe Transact-SQL

Syntaxe

sp_sequence_get_range
    [ @sequence_name = ] N'sequence_name'
    , [ @range_size = ] range_size
    , [ @range_first_value = ] range_first_value OUTPUT
    [ , [ @range_last_value = ] range_last_value OUTPUT ]
    [ , [ @range_cycle_count = ] range_cycle_count OUTPUT ]
    [ , [ @sequence_increment = ] sequence_increment OUTPUT ]
    [ , [ @sequence_min_value = ] sequence_min_value OUTPUT ]
    [ , [ @sequence_max_value = ] sequence_max_value OUTPUT ]
[ ; ]

Arguments

[ @sequence_name = ] N’sequence_name'

Nom de l'objet séquence. Le schéma est facultatif. @sequence_name est nvarchar(776), sans valeur par défaut.

[ @range_size = ] range_size

Nombre de valeurs à extraire de la séquence. @range_size est bigint, sans valeur par défaut.

[ @range_first_value = ] sortie de range_first_value

Le paramètre de sortie retourne la première valeur (minimale ou maximale) de l'objet séquence utilisée pour calculer la plage demandée. @range_first_value est un paramètre OUTPUT de type sql_variant, avec le même type de base que l’objet séquence utilisé dans la requête.

[ @range_last_value = ] sortie de range_last_value

Le paramètre de sortie facultatif retourne la dernière valeur de la plage demandée. @range_last_value est un paramètre OUTPUT de type sql_variant, avec le même type de base que l’objet séquence utilisé dans la requête.

[ @range_cycle_count = ] sortie range_cycle_count

Le paramètre de sortie facultatif retourne le nombre de fois où l'objet séquence a été répété pour retourner la plage demandée. @range_cycle_count est un paramètre OUTPUT de type int.

[ @sequence_increment = ] sortie sequence_increment

Le paramètre de sortie facultatif retourne l'incrément de l'objet séquence utilisé pour calculer la plage demandée. @sequence_increment est un paramètre OUTPUT de type sql_variant, avec le même type de base que l’objet séquence utilisé dans la requête.

[ @sequence_min_value = ] sortie sequence_min_value

Le paramètre de sortie facultatif retourne la valeur minimale de l'objet séquence. @sequence_min_value est un paramètre OUTPUT de type sql_variant, avec le même type de base que l’objet séquence utilisé dans la requête.

[ @sequence_max_value = ] sortie sequence_max_value

Le paramètre de sortie facultatif retourne la valeur maximale de l'objet séquence. @sequence_max_value est un paramètre OUTPUT de type sql_variant, avec le même type de base que l’objet séquence utilisé dans la requête.

Valeurs des codes de retour

0 (réussite) ou 1 (échec).

Notes

sp_sequence_get_range est dans le sys schéma et peut être référencé en tant que sys.sp_sequence_get_range.

Séquences se répétant

Si nécessaire, l’objet séquence cycles le nombre approprié de fois pour traiter la plage demandée. Le nombre de fois cycle est retourné à l’appelant par le biais du paramètre @range_cycle_count .

Remarque

Lors d'un cycle, un objet séquence redémarre à la valeur minimale dans le cas d'une séquence croissante et à la valeur maximale pour une séquence décroissante, et non pas à la valeur de début de l'objet séquence.

Séquences ne se répétant pas

Si le nombre de valeurs de la plage demandée est supérieur aux valeurs disponibles restantes dans l’objet séquence, la plage demandée n’est pas déduite de l’objet séquence et l’erreur suivante 11732 est retournée :

La plage demandée pour l’objet séquence '%.*ls' dépasse la limite maximale ou minimale. Réessayez avec une plage plus petite.

Autorisations

Nécessite UPDATE une autorisation sur l’objet séquence ou le schéma de l’objet séquence.

Exemples

Les exemples suivants utilisent un objet séquence nommé Test.RangeSeq. Utilisez l’instruction suivante pour créer la Test.RangeSeq séquence.

CREATE SCHEMA Test;
GO

CREATE SEQUENCE Test.RangeSeq AS INT START
    WITH 1
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 25
    CYCLE CACHE 10;

A. Récupérer une plage de valeurs de séquence

L’instruction suivante obtient quatre numéros de séquence à partir de l’objet séquence Test.RangeSeq et retourne le premier des nombres à l’utilisateur.

DECLARE @range_first_value_output SQL_VARIANT;

EXEC sys.sp_sequence_get_range @sequence_name = N'Test.RangeSeq',
    @range_size = 4,
    @range_first_value = @range_first_value_output OUTPUT;

SELECT @range_first_value_output AS FirstNumber;

B. Retourner tous les paramètres de sortie

L’exemple suivant retourne toutes les valeurs de sortie de la sp_sequence_get_range procédure.

DECLARE @FirstSeqNum SQL_VARIANT,
    @LastSeqNum SQL_VARIANT,
    @CycleCount INT,
    @SeqIncr SQL_VARIANT,
    @SeqMinVal SQL_VARIANT,
    @SeqMaxVal SQL_VARIANT;

EXEC sys.sp_sequence_get_range @sequence_name = N'Test.RangeSeq',
    @range_size = 5,
    @range_first_value = @FirstSeqNum OUTPUT,
    @range_last_value = @LastSeqNum OUTPUT,
    @range_cycle_count = @CycleCount OUTPUT,
    @sequence_increment = @SeqIncr OUTPUT,
    @sequence_min_value = @SeqMinVal OUTPUT,
    @sequence_max_value = @SeqMaxVal OUTPUT;

-- The following statement returns the output values
SELECT @FirstSeqNum AS FirstVal,
    @LastSeqNum AS LastVal,
    @CycleCount AS CycleCount,
    @SeqIncr AS SeqIncrement,
    @SeqMinVal AS MinSeq,
    @SeqMaxVal AS MaxSeq;

La modification de l’argument @range_size en un grand nombre, par 75 exemple provoque le cycle de l’objet séquence. Vérifiez l’argument @range_cycle_count pour déterminer si et combien de fois l’objet séquence a cycleé.

C. Exemple utilisant ADO.NET

L’exemple suivant obtient une plage à partir de Test.RangeSeq à l’aide de ADO.NET.

SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sys.sp_sequence_get_range";
cmd.Parameters.AddWithValue("@sequence_name", "Test.RangeSeq");
cmd.Parameters.AddWithValue("@range_size", 10);

// Specify an output parameter to retrieve the first value of the generated range.
SqlParameter firstValueInRange = new SqlParameter("@range_first_value", SqlDbType.Variant);
firstValueInRange.Direction = ParameterDirection.Output;
cmd.Parameters.Add(firstValueInRange);

conn.Open();
cmd.ExecuteNonQuery();

// Output the first value of the generated range.
Console.WriteLine(firstValueInRange.Value);