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