sp_sequence_get_range(Transact-SQL)
시퀀스 개체에서 시퀀스 값의 범위를 반환합니다. 시퀀스 개체는 요청한 값의 수를 생성 및 실행하고 범위와 관련된 메타데이터를 응용 프로그램에 제공합니다.
시퀀스 번호에 대한 자세한 내용은 시퀀스 번호을 참조하십시오.
구문
sp_sequence_get_range [ @sequence_name = ] N'<sequence>'
, [ @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'
시퀀스 개체의 이름입니다. 스키마는 선택 사항입니다. sequence_name은 nvarchar(776)입니다.[ @range_size = ] range_size
시퀀스에서 인출할 값의 수입니다. @range_size는 bigint입니다.[ @range_first_value = ] range_first_value
출력 매개 변수는 요청한 범위를 계산하는 데 사용된 시퀀스 개체의 첫 번째(최소 또는 최대) 값을 반환합니다. @range_first_value는 요청에 사용된 시퀀스 개체의 기본 유형과 동일한 유형을 가진 sql_variant입니다.[ @range_last_value = ] range_last_value
선택적 출력 매개 변수는 요청한 범위의 마지막 값을 반환합니다. @range_last_value는 요청에 사용된 시퀀스 개체의 기본 유형과 동일한 유형을 가진 sql_variant입니다.[ @range_cycle_count = ] range_cycle_count
선택적 출력 매개 변수는 시퀀스 개체가 요청한 범위를 반환하기 위해 순환한 횟수를 반환합니다. @range_cycle_count는 int입니다.[ @sequence_increment = ] sequence_increment
선택적 출력 매개 변수는 요청한 범위를 계산하는 데 사용된 시퀀스 개체의 증분을 반환합니다. @sequence_increment는 요청에 사용된 시퀀스 개체의 기본 유형과 동일한 유형을 가진 sql_variant입니다.[ @sequence_min_value = ] sequence_min_value
선택적 출력 매개 변수는 시퀀스 개체의 최소값을 반환합니다. @sequence_min_value는 요청에 사용된 시퀀스 개체의 기본 유형과 동일한 유형을 가진 sql_variant입니다.[ @sequence_max_value = ] sequence_max_value
선택적 출력 매개 변수는 시퀀스 개체의 최대값을 반환합니다. @sequence_max_value는 요청에 사용된 시퀀스 개체의 기본 유형과 동일한 유형을 가진 sql_variant입니다.
반환 코드 값
0(성공) 또는 1(실패)
주의
sp_sequence_get_range는 sys. 스키마에 있으며 sys.sp_sequence_get_range로 참조될 수 있습니다.
순환 시퀀스
필요할 경우 시퀀스 개체는 적절한 횟수로 순환하여 요청한 범위를 처리합니다. 순환 횟수는 @range\_cycle\_count를 통해 호출자에게 반환됩니다.
[!참고]
순환할 때 시퀀스 개체는 시퀀스 개체의 시작 값이 아니라 오름차순 시퀀스에 대해서는 최소값, 내림차순 시퀀스에 대해서는 최대값에서 다시 시작합니다.
비순환 시퀀스
요청한 범위의 값 수가 시퀀스 개체에 남아 있는 사용 가능한 값보다 크면 시퀀스 개체에서 요청한 범위를 빼지 않으며 다음 오류 11732가 반환됩니다.
The requested range for sequence object '%.*ls' exceeds the maximum or minimum limit. Retry with a smaller range.
사용 권한
시퀀스 개체 또는 시퀀스 개체의 스키마에 대한 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
;
1.시퀀스 값의 범위 검색
다음 문에서는 Test.RangeSeq 시퀀스 개체에서 네 개의 시퀀스 번호를 가져오며 첫 번째 번호를 사용자에게 반환합니다.
DECLARE @range_first_value sql_variant ,
@range_first_value_output sql_variant ;
EXEC 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 ;
2.모든 출력 매개 변수 반환
다음 예에서는 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 인수를 검사하여 시퀀스 개체 순환 여부와 순환 횟수를 확인하십시오.
3.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 retreive 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);