sp_sequence_get_range(Transact-SQL)
적용 대상: SQL ServerAzure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
시퀀스 개체의 시퀀스 값 범위를 반환합니다. 시퀀스 개체는 요청된 값 수를 생성하고 발급하며 범위와 관련된 메타데이터를 애플리케이션에 제공합니다.
시퀀스 번호에 대한 자세한 내용은 시퀀스 번호를 참조 하세요.
구문
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 OUTPUT
출력 매개 변수는 요청된 범위를 계산하는 데 사용되는 시퀀스 개체의 첫 번째(최소 또는 최대) 값을 반환합니다. @range_first_value 요청에 사용되는 시퀀스 개체와 동일한 기본 형식을 사용하여 sql_variant 형식의 OUTPUT 매개 변수입니다.
[ @range_last_value = ] range_last_value OUTPUT
선택적 출력 매개 변수는 요청한 범위의 마지막 값을 반환합니다. @range_last_value 요청에 사용되는 시퀀스 개체와 동일한 기본 형식을 가진 sql_variant 형식의 OUTPUT 매개 변수입니다.
[ @range_cycle_count = ] range_cycle_count OUTPUT
선택적 출력 매개 변수는 요청된 범위를 반환하기 위해 시퀀스 개체가 순환한 횟수를 반환합니다. @range_cycle_count int 형식의 OUTPUT 매개 변수입니다.
[ @sequence_increment = ] sequence_increment OUTPUT
선택적 출력 매개 변수는 요청한 범위를 계산하는 데 사용된 시퀀스 개체의 증분을 반환합니다. @sequence_increment 요청에 사용되는 시퀀스 개체와 동일한 기본 형식을 가진 sql_variant 형식의 OUTPUT 매개 변수입니다.
[ @sequence_min_value = ] sequence_min_value OUTPUT
선택적 출력 매개 변수는 시퀀스 개체의 최소값을 반환합니다. @sequence_min_value 요청에 사용되는 시퀀스 개체와 동일한 기본 형식을 가진 sql_variant 형식의 OUTPUT 매개 변수입니다.
[ @sequence_max_value = ] sequence_max_value OUTPUT
선택적 출력 매개 변수는 시퀀스 개체의 최대값을 반환합니다. @sequence_max_value 요청에 사용되는 시퀀스 개체와 동일한 기본 형식을 가진 sql_variant 형식의 OUTPUT 매개 변수입니다.
반환 코드 값
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;
A. 시퀀스 값 범위 검색
다음 문은 Test.RangeSeq 시퀀스 개체에서 4개의 시퀀스 번호를 가져오고 숫자의 첫 번째 숫자를 사용자에게 반환합니다.
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 인수를 확인하여 시퀀스 개체가 순환되었는지 여부와 횟수를 확인합니다.
C. ADO.NET 사용하는 예제
다음 예제에서는 ADO.NET 사용하여 Test.RangeSeq에서 범위를 가져옵니다.
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);