Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL-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);