Sdílet prostřednictvím


sp_sequence_get_range (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analyticssql database v Microsoft Fabric

Vrací rozsah sekvenčních hodnot z objektu sekvence. Sekvenční objekt generuje a vydává požadovaný počet hodnot a poskytuje aplikaci metadata související s rozsahem.

Pro více informací o pořadových číslech viz Sekvenční čísla.

Transact-SQL konvence syntaxe

Syntaxe

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'

Název sekvenčního objektu. Schéma je volitelné. @sequence_name je nvarchar(776), bez výchozího nastavení.

[ @range_size = ] range_size

Počet hodnot, které je třeba získat ze sekvence. @range_size je bigint, bez výchozího nastavení.

[ @range_first_value = ] range_first_value VÝSTUP

Výstupní parametr vrací první (minimální nebo maximální) hodnotu sekvenčního objektu použitého k výpočtu požadovaného rozsahu. @range_first_value je parametr OUTPUT typu sql_variant, se stejným základním typem jako sekvenční objekt použitý v požadavku.

[ @range_last_value = ] range_last_value VÝSTUP

Volitelný výstupní parametr vrací poslední hodnotu požadovaného rozsahu. @range_last_value je parametr OUTPUT typu sql_variant, se stejným základním typem jako sekvenční objekt použitý v požadavku.

[ @range_cycle_count = ] range_cycle_count VÝSTUP

Volitelný výstupní parametr vrací počet cyklů, které sekvenční objekt provedl, aby vrátil požadovaný rozsah. @range_cycle_count je parametr OUTPUT typu int.

[ @sequence_increment = ] sequence_increment VÝSTUP

Volitelný výstupní parametr vrací přírůstek sekvenčního objektu použitého k výpočtu požadovaného rozsahu. @sequence_increment je parametr OUTPUT typu sql_variant, se stejným základním typem jako sekvenční objekt použitý v požadavku.

[ @sequence_min_value = ] sequence_min_value VÝSTUP

Volitelný výstupní parametr vrací minimální hodnotu sekvenčního objektu. @sequence_min_value je parametr OUTPUT typu sql_variant, se stejným základním typem jako sekvenční objekt použitý v požadavku.

[ @sequence_max_value = ] sequence_max_value VÝSTUP

Volitelný výstupní parametr vrací maximální hodnotu sekvenčního objektu. @sequence_max_value je parametr OUTPUT typu sql_variant, se stejným základním typem jako sekvenční objekt použitý v požadavku.

Hodnoty návratového kódu

0 (úspěch) nebo 1 (selhání).

Poznámky

sp_sequence_get_range je ve schématu sys a lze jej odkazovat jako sys.sp_sequence_get_range.

Cyklické sekvence

Pokud je to nutné, sekvenční objekt cykluje příslušný početkrát, aby obsloužil požadovaný rozsah. Počet cyklů se vrací volajícímu přes parametr @range_cycle_count .

Poznámka:

Při cyklování sekvenční objekt restartuje z minimální hodnoty pro vzestupnou sekvenci a maximální hodnoty pro sestupnou sekvenci, nikoli ze startovní hodnoty sekvenčního objektu.

Necyklické sekvence

Pokud je počet hodnot v požadovaném rozsahu větší než zbývající dostupné hodnoty v sekvenčním objektu, požadovaný rozsah není odečten ze sekvenčního objektu a je vrácena následující chyba 11732:

Požadovaný rozsah pro sekvenční objekt '%.*ls' překračuje maximální nebo minimální limit. Zkuste to znovu s menším rozsahem.

Povolení

Vyžaduje UPDATE povolení k sekvenčnímu objektu nebo schématu sekvenčního objektu.

Examples

Následující příklady používají sekvenční objekt nazvaný Test.RangeSeq. Použijte následující příkaz k vytvoření sekvence 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. Získejte rozsah sekvenčních hodnot

Následující příkaz získá čtyři pořadová čísla z objektu Test.RangeSeq a vrátí uživateli první číslo.

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. Vraťte všechny výstupní parametry

Následující příklad vrací všechny výstupní hodnoty z procedury 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;

Změna argumentu @range_size na velké číslo, například způsobí 75 cyklus sekvenčního objektu. Zkontrolujte argument @range_cycle_count , abyste zjistili, zda a kolikrát se sekvenční objekt cykloval.

C. Příklad s použitím ADO.NET

Následující příklad získá rozsah z Test.RangeSeq pomocí 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);