Поделиться через


sp_sequence_get_range (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics

Возвращает диапазон значений последовательности из объекта последовательности. Объект последовательности создает и выдает запрошенное количество значений, а также предоставляет приложению метаданные, связанные с диапазоном.

Дополнительные сведения о номерах последовательности см. в разделе "Порядковые номера".

Соглашения о синтаксисе Transact-SQL

Синтаксис

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 ]
[ ; ]

Аргументы

[ @sequence_name = ] N'sequence_name'

Имя объекта последовательности. Схема является необязательной. @sequence_name — nvarchar(776), без значения по умолчанию.

[ @range_size = ] range_size

Количество получаемых из последовательности значений. @range_size является bigint, без значения по умолчанию.

[ @range_first_value = ] range_first_value ВЫХОДНЫЕ ДАННЫЕ

Выходной параметр возвращает первое (минимальное или максимальное) значение объекта последовательности, используемое для вычисления запрошенного диапазона. @range_first_value — это параметр OUTPUT типа sql_variant с тем же базовым типом, что и объект последовательности, используемый в запросе.

[ @range_last_value = ] range_last_value OUTPUT

Необязательный выходной параметр возвращает последнее значение запрашиваемого диапазона. @range_last_value — это параметр OUTPUT типа sql_variant с тем же базовым типом, что и объект последовательности, используемый в запросе.

[ @range_cycle_count = ] range_cycle_count OUTPUT

Необязательный выходной параметр возвращает количество циклов объекта последовательности, которое потребовалось для возврата запрошенного диапазона. @range_cycle_count — это параметр OUTPUT типа int.

[ @sequence_increment = ] sequence_increment OUTPUT

Необязательный выходной параметр возвращает приращение объекта последовательности, которое использовалось для вычисления запрошенного диапазона. @sequence_increment — это параметр OUTPUT типа sql_variant с тем же базовым типом, что и объект последовательности, используемый в запросе.

[ @sequence_min_value = ] sequence_min_value ВЫХОДНЫЕ ДАННЫЕ

Необязательный выходной параметр возвращает минимальное значение объекта последовательности. @sequence_min_value — это параметр OUTPUT типа sql_variant с тем же базовым типом, что и объект последовательности, используемый в запросе.

[ @sequence_max_value = ] sequence_max_value OUTPUT

Необязательный выходной параметр возвращает максимальное значение объекта последовательности. @sequence_max_value — это параметр OUTPUT типа sql_variant с тем же базовым типом, что и объект последовательности, используемый в запросе.

Значения кода возврата

0 (успешно) или 1 (сбой).

Замечания

sp_sequence_get_range находится в схеме sys и может ссылаться как sys.sp_sequence_get_rangeна .

Циклические последовательности

При необходимости объект последовательности циклит соответствующее количество раз для обслуживания запрошенного диапазона. Число циклического цикла возвращается вызывающей объекту через параметр @range_cycle_count .

Примечание.

При циклическом выполнении объект последовательности перезапускается с минимального значения в возрастающей последовательности и с максимального в убывающей, а не с начального значения объекта последовательности.

Нециклические последовательности

Если число значений в запрошенном диапазоне больше остальных доступных значений в объекте последовательности, запрошенный диапазон не вычитается из объекта последовательности, а возвращается следующая ошибка 11732:

Запрошенный диапазон для объекта последовательности "%.*ls" превышает максимальное или минимальное ограничение. Повторите попытку с меньшим диапазоном.

Разрешения

Требуется UPDATE разрешение на объект последовательности или схему объекта последовательности.

Примеры

В следующих примерах используется объект последовательности с именем Test.RangeSeq. Используйте следующую инструкцию, чтобы создать 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;

А. Получение диапазона значений последовательности

Следующая инструкция получает четыре номера последовательности из объекта последовательности Test.RangeSeq и возвращает первое из чисел пользователю.

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. Возврат всех выходных параметров

В следующем примере возвращаются все выходные значения из sp_sequence_get_range процедуры.

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;

Изменение аргумента @range_size на большое число, например 75 , приводит к циклу объекта последовательности. Проверьте аргумент @range_cycle_count, чтобы определить, сколько раз циклировался объект последовательности.

В. Пример использования ADO.NET

В следующем примере возвращается диапазон из Test.RangeSeq с помощью 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);