다음을 통해 공유


sp_sequence_get_range(Transact-SQL)

적용 대상: SQL ServerAzure SQL Database Azure SQL Managed Instance 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 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);