다음을 통해 공유


sp_sequence_get_range(Transact-SQL)

시퀀스 개체에서 시퀀스 값의 범위를 반환합니다. 시퀀스 개체는 요청한 값의 수를 생성 및 실행하고 범위와 관련된 메타데이터를 응용 프로그램에 제공합니다.

시퀀스 번호에 대한 자세한 내용은 시퀀스 번호을 참조하십시오.

항목 링크 아이콘 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);

참고 항목

참조

CREATE SEQUENCE(Transact-SQL)

ALTER SEQUENCE(Transact-SQL)

DROP SEQUENCE(Transact-SQL)

NEXT VALUE FOR(Transact-SQL)

개념

시퀀스 번호