Delen via


sp_sequence_get_range (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-database in Microsoft Fabric

Geeft een bereik van sequentiewaarden terug van een sequentieobject. Het sequentieobject genereert en geeft het aantal gevraagde waarden en voorziet de applicatie van metadata met betrekking tot het bereik.

Voor meer informatie over volgnummers, zie Sequentienummers.

Transact-SQL syntaxis-conventies

Syntaxis

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'

De naam van het sequentieobject. Het schema is optioneel. @sequence_name is nvarchar(776), zonder standaard.

[ @range_size = ] range_size

Het aantal waarden dat uit de reeks moet worden opgehaald. @range_size is bigint, zonder standaard.

[ @range_first_value = ] range_first_value OUTPUT

De outputparameter geeft de eerste (minimale of maximum) waarde terug van het sequentieobject dat wordt gebruikt om het gevraagde bereik te berekenen. @range_first_value is een OUTPUT-parameter van type sql_variant, met hetzelfde basistype als het sequentieobject dat in het verzoek wordt gebruikt.

[ @range_last_value = ] range_last_value OUTPUT

De optionele outputparameter geeft de laatste waarde van het gevraagde bereik terug. @range_last_value is een OUTPUT-parameter van type sql_variant, met hetzelfde basistype als het sequentieobject dat in het verzoek wordt gebruikt.

[ @range_cycle_count = ] range_cycle_count OUTPUT

Optionele outputparameter geeft het aantal keren terug dat het sequentieobject heeft gecycleerd om het gevraagde bereik terug te geven. @range_cycle_count is een OUTPUT-parameter van het type int.

[ @sequence_increment = ] sequence_increment OUTPUT

Optionele outputparameter geeft de increment van het sequentieobject terug dat wordt gebruikt om het gevraagde bereik te berekenen. @sequence_increment is een OUTPUT-parameter van type sql_variant, met hetzelfde basistype als het sequentieobject dat in het verzoek wordt gebruikt.

[ @sequence_min_value = ] sequence_min_value OUTPUT

De optionele outputparameter geeft de minimale waarde van het sequentieobject terug. @sequence_min_value is een OUTPUT-parameter van type sql_variant, met hetzelfde basistype als het sequentieobject dat in het verzoek wordt gebruikt.

[ @sequence_max_value = ] sequence_max_value OUTPUT

De optionele outputparameter geeft de maximale waarde van het sequentieobject terug. @sequence_max_value is een OUTPUT-parameter van type sql_variant, met hetzelfde basistype als het sequentieobject dat in het verzoek wordt gebruikt.

Codewaarden retourneren

0 (geslaagd) of 1 (mislukt).

Opmerkingen

sp_sequence_get_range in het sys schema is, en kan worden aangeduid als sys.sp_sequence_get_range.

Fietssequenties

Indien nodig cyclus het sequentieobject het juiste aantal keren om het gevraagde bereik te bedienen. Het aantal keren dat wordt gecycleerd wordt via de @range_cycle_count parameter aan de aanroeper teruggegeven.

Opmerking

Bij cyclen start een sequentieobject opnieuw vanaf de minimale waarde voor een oplopende reeks en de maximumwaarde voor een dalende reeks, niet vanaf de startwaarde van het sequentieobject.

Niet-cyclische sequenties

Als het aantal waarden in het gevraagde bereik groter is dan de resterende beschikbare waarden in het sequentieobject, wordt het gevraagde bereik niet afgetrokken van het sequentieobject, en wordt de volgende foutmelding 11732 teruggegeven:

Het aangevraagde bereik voor het reeksobject '%.*ls' overschrijdt de maximum- of minimumlimiet. Probeer het opnieuw met een kleiner bereik.

Permissions

Vereist UPDATE toestemming voor het sequentieobject of het schema van het sequentieobject.

Voorbeelden

De volgende voorbeelden gebruiken een sequentieobject genaamd Test.RangeSeq. Gebruik de volgende instructie om de Test.RangeSeq reeks te maken.

CREATE SCHEMA Test;
GO

CREATE SEQUENCE Test.RangeSeq
    AS INT
    START WITH 1
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 25
    CYCLE
    CACHE 10;

Eén. Haal een bereik van sequentiewaarden op

De volgende instructie krijgt vier volgnummers van het Test.RangeSeq sequentieobject en geeft het eerste van de nummers terug aan de gebruiker.

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. Geef alle uitvoerparameters terug

Het volgende voorbeeld geeft alle uitvoerwaarden van de sp_sequence_get_range procedure terug.

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;

Het veranderen van het @range_size-argument naar een groot getal zoals veroorzaakt dat 75 het sequentieobject cyclust. Controleer het @range_cycle_count-argument om te bepalen of en hoe vaak het sequentieobject heeft gecycleerd.

C. Voorbeeld met ADO.NET

Het volgende voorbeeld krijgt een bereik uit de Test.RangeSeq door gebruik te maken van 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);