sp_sequence_get_range (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-databas i Microsoft Fabric

Returnerar ett intervall av sekvensvärden från ett sekvensobjekt. Sekvensobjektet genererar och utfärdar antalet begärda värden och förser applikationen med metadata relaterade till intervallet.

För mer information om sekvensnummer, se Sekvensnummer.

Transact-SQL syntaxkonventioner

Syntax

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 ]
[ ; ]

Arguments

[ @sequence_name = ] N'sequence_name'

Namnet på sekvensobjektet. Schemat är valfritt. @sequence_name är nvarchar(776), utan standard.

[ @range_size = ] range_size

Antalet värden som ska hämtas från sekvensen. @range_size är bigint, utan standard.

[ @range_first_value = ] range_first_value UTGÅNG

Outputparametern returnerar det första (minsta eller maximala) värdet av sekvensobjektet som används för att beräkna det begärda intervallet. @range_first_value är en OUTPUT-parameter av typ sql_variant, med samma bastyp som sekvensobjektet som användes i förfrågan.

[ @range_last_value = ] range_last_value UTGÅNG

Valfri utgångsparameter returnerar det sista värdet av det begärda intervallet. @range_last_value är en OUTPUT-parameter av typ sql_variant, med samma bastyp som sekvensobjektet som användes i förfrågan.

[ @range_cycle_count = ] range_cycle_count UTGÅNG

Valfri utgångsparameter returnerar antalet gånger som sekvensobjektet cyklade för att returnera det begärda intervallet. @range_cycle_count är en OUTPUT-parameter av typen int.

[ @sequence_increment = ] sequence_increment UTGÅNG

Valfri utgångsparameter returnerar inkrementen av sekvensobjektet som används för att beräkna det begärda intervallet. @sequence_increment är en OUTPUT-parameter av typ sql_variant, med samma bastyp som sekvensobjektet som används i förfrågan.

[ @sequence_min_value = ] sequence_min_value UTGÅNG

Valfri utgångsparameter returnerar det minsta värdet för sekvensobjektet. @sequence_min_value är en OUTPUT-parameter av typ sql_variant, med samma bastyp som sekvensobjektet som används i förfrågan.

[ @sequence_max_value = ] sequence_max_value UTGÅNG

Valfri utgångsparameter returnerar det maximala värdet för sekvensobjektet. @sequence_max_value är en OUTPUT-parameter av typ sql_variant, med samma bastyp som sekvensobjektet som användes i förfrågan.

Returnera kodvärden

0 (lyckades) eller 1 (fel).

Anmärkningar

sp_sequence_get_range är i schemat sys , och kan refereras som sys.sp_sequence_get_range.

Cykelsekvenser

Vid behov cyklar sekvensobjektet lämpligt antal gånger för att serva det begärda intervallet. Antalet cyklade gånger returneras till anroparen via @range_cycle_count-parametern.

Anmärkning

Vid cykling startar ett sekvensobjekt om från minimivärdet för en stigande sekvens och maximumvärdet för en fallande sekvens, inte från startvärdet för sekvensobjektet.

Icke-cykliska sekvenser

Om antalet värden i det begärda intervallet är större än de återstående tillgängliga värdena i sekvensobjektet, dras det begärda intervallet inte från sekvensobjektet, och följande felmeddelande 11732 returneras:

Det begärda intervallet för sekvensobjektet%.*ls överskrider maxgränsen eller minimigränsen. Försök igen med ett mindre intervall.

Permissions

Kräver UPDATE behörighet för sekvensobjektet eller schemat för sekvensobjektet.

Examples

Följande exempel använder ett sekvensobjekt som heter Test.RangeSeq. Använd följande sats för att skapa sekvensen 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. Hämta ett intervall av sekvensvärden

Följande sats får fyra sekvensnummer från Test.RangeSeq-sekvensobjektet och returnerar det första numret till användaren.

DECLARE @range_first_value_output AS SQL_VARIANT;

EXECUTE 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. Returnera alla utgångsparametrar

Följande exempel returnerar alla utdata från proceduren sp_sequence_get_range .

DECLARE
    @FirstSeqNum AS SQL_VARIANT,
    @LastSeqNum AS SQL_VARIANT,
    @CycleCount AS INT,
    @SeqIncr AS SQL_VARIANT,
    @SeqMinVal AS SQL_VARIANT,
    @SeqMaxVal AS SQL_VARIANT;

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

Att ändra @range_size-argumentet till ett stort tal, såsom 75 får sekvensobjektet att cykla. Kontrollera @range_cycle_count-argumentet för att avgöra om och hur många gånger sekvensobjektet har cyklat.

C. Exempel med ADO.NET

Följande exempel får ett intervall från Test.RangeSeq genom att använda ADO.NET.

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