Udostępnij za pomocą


sp_sequence_get_range (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL database w usłudze Microsoft Fabric

Zwraca zakres wartości sekwencji z obiektu sekwencji. Obiekt sekwencji generuje i generuje liczbę żądanych wartości oraz dostarcza aplikacji metadane związane z zakresem.

Aby uzyskać więcej informacji o numerach sekwencyjnych, zobacz Numery sekwencji.

Transact-SQL konwencje składni

Składnia

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'

Nazwa obiektu sekwencji. Schemat jest opcjonalny. @sequence_name to nvarchar(776), bez domyślnego wypadku.

[ @range_size = ] range_size

Liczba wartości do pobrania z sekwencji. @range_size jest bigint, bez domyślnego domyślenia.

[ @range_first_value = ] range_first_value WYJŚCIE

Parametr wyjściowy zwraca pierwszą (minimalną lub maksymalną) wartość obiektu sekwencji używanego do obliczenia żądanego zakresu. @range_first_value jest parametrem OUTPUT typu sql_variant, o tym samym typie bazowym co obiekt sekwencji używany w żądaniu.

[ @range_last_value = ] range_last_value WYJŚCIE

Opcjonalny parametr wyjściowy zwraca ostatnią wartość żądanego zakresu. @range_last_value jest parametrem OUTPUT typu sql_variant, o tym samym typie bazowym co obiekt sekwencji używany w żądaniu.

[ @range_cycle_count = ] range_cycle_count WYJŚCIE

Opcjonalny parametr wyjściowy zwraca liczbę cykli, ile obiekt sekwencji przeszedł cykl, aby zwrócić żądany zakres. @range_cycle_count jest parametrem OUTPUT typu int.

[ @sequence_increment = ] sequence_increment WYJŚCIE

Opcjonalny parametr wyjściowy zwraca przyrost obiektu sekwencji użytego do obliczenia żądanego zakresu. @sequence_increment jest parametrem OUTPUT typu sql_variant, o tym samym typie bazowym co obiekt sekwencji użyty w żądaniu.

[ @sequence_min_value = ] sequence_min_value WYJŚCIE

Opcjonalny parametr wyjściowy zwraca minimalną wartość obiektu sekwencji. @sequence_min_value jest parametrem OUTPUT typu sql_variant, o tym samym typie bazowym co obiekt sekwencji używany w żądaniu.

[ @sequence_max_value = ] sequence_max_value WYJŚCIE

Opcjonalny parametr wyjściowy zwraca maksymalną wartość obiektu sekwencji. @sequence_max_value jest parametrem OUTPUT typu sql_variant, o tym samym typie bazowym co obiekt sekwencji użyty w żądaniu.

Zwracanie wartości kodu

0 (powodzenie) lub 1 (niepowodzenie).

Uwagi

sp_sequence_get_rangejest w schemacie sys i można go odwołać jako .sys.sp_sequence_get_range

Sekwencje rowerowe

W razie potrzeby obiekt sekwencji cykluje odpowiednią liczbę razy, aby obsłużyć żądany zakres. Liczba cykli jest zwracana do wywołującego przez parametr @range_cycle_count .

Uwaga / Notatka

Podczas cyklowania obiekt sekwencji restartuje się od minimalnej wartości dla sekwencji rosnącej i maksymalnej wartości dla sekwencji malejącej, a nie od wartości początkowej obiektu sekwencji.

Sekwencje niecykliczne

Jeśli liczba wartości w żądanym zakresie jest większa niż pozostałe dostępne wartości w obiekcie sekwencji, żądany zakres nie jest odejmowany od obiektu sekwencji i zwracany jest następujący błąd 11732:

Żądany zakres dla obiektu sekwencji "%.*ls" przekracza maksymalny lub minimalny limit. Ponów próbę z mniejszym zakresem.

Permissions

Wymaga UPDATE uprawnień do obiektu sekwencji lub schematu obiektu sekwencji.

Przykłady

Poniższe przykłady używają obiektu sekwencji o nazwie Test.RangeSeq. Użyj następującego sformułowania, aby stworzyć sekwencję Test.RangeSeq .

CREATE SCHEMA Test;
GO

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

A. Pobierz zakres wartości sekwencji

Następne zdanie pobiera cztery numery sekwencyjne z obiektu sekwencji Test.RangeSeq i zwraca użytkownikowi pierwszą z liczb.

DECLARE @range_first_value_output AS SQL_VARIANT;

EXECUTE 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. Zwróć wszystkie parametry wyjściowe

Poniższy przykład zwraca wszystkie wartości wyjściowe z procedury sp_sequence_get_range .

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

EXECUTE 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;

Zmiana argumentu @range_size na dużą liczbę, 75 na przykład powoduje cyklowanie obiektu sekwencji. Sprawdź argument @range_cycle_count , aby ustalić, czy i ile razy obiekt sekwencji cyklował.

C. Przykład z użyciem ADO.NET

Poniższy przykład otrzymuje zakres z Test.RangeSeq za pomocą 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);