sp_sequence_get_range(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

시퀀스 개체의 시퀀스 값 범위를 반환합니다. 시퀀스 개체는 요청된 값 수를 생성하고 발급하며 범위와 관련된 메타데이터를 애플리케이션에 제공합니다.

시퀀스 번호에 대한 자세한 내용은 시퀀스 번호를 참조 하세요.

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 대단합니다.

[ @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(실패)

설명

sys에서 sp_sequence_get_rangeis. 스키마를 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  
;  

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

참고 항목

CREATE SEQUENCE(Transact-SQL)
ALTER SEQUENCE(Transact-SQL)
DROP SEQUENCE(Transact-SQL)
NEXT VALUE FOR(Transact-SQL)
시퀀스 번호