Megosztás a következőn keresztül:


sp_sequence_get_range (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-adatbázis a Microsoft Fabricben

Sorozatértékek tartományát adja vissza egy sorozatobjektumtól. A szekvencia objektum generálja és adja ki a kért értékek számát, és az alkalmazásnak a tartományhoz kapcsolódó metaadatokat biztosít.

További információért a sorozatszámokról lásd: Sorozatszámok.

Transact-SQL szintaxis konvenciók

Szemantika

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'

A sorozatobjektum neve. A séma opcionális. @sequence_namenvarchar(776), alapértelmezett nélkül.

[ @range_size = ] range_size

Az értékek száma, amelyeket a sorozatból kell behozni. @range_sizenagy, nincs alapértelmezett eszköz.

[ @range_first_value = ] range_first_value KIMENET

A kimeneti paraméter a sorrend objektumának első (minimális vagy maximális) értékét adja vissza, amelyet a kért tartomány kiszámításához használnak. @range_first_value egy sql_variant típusú OUTPUT paraméter, amelynek alaptípusa megegyezik a kérésben használt szekvencia objektummal.

[ @range_last_value = ] range_last_value KIMENET

Az opcionális kimeneti paraméter a kért tartomány utolsó értékét adja vissza. @range_last_value egy sql_variant típusú OUTPUT paraméter, amely ugyanazzal az alaptípussal, mint a kérésben használt szekvencia objektum.

[ @range_cycle_count = ] range_cycle_count KIMENET

Az opcionális kimeneti paraméter azt adja vissza, hányszor ciklusban a sorozatobjektum a kívánt tartomány visszaadja. @range_cycle_count egy OUTPUT paraméter, amely int típusú.

[ @sequence_increment = ] sequence_increment KIMENET

Az opcionális kimeneti paraméter visszaadja a sorrend objektumának növekedését, amelyet a kért tartomány kiszámításához használnak. @sequence_increment egy sql_variant típusú OUTPUT paraméter, amely ugyanazzal az alaptípussal, mint a kérésben használt szekvencia objektum.

[ @sequence_min_value = ] sequence_min_value KIMENET

Az opcionális kimeneti paraméter a szekvenciaobjektum minimális értékét adja vissza. @sequence_min_value egy sql_variant típusú OUTPUT paraméter, amelynek alaptípusa megegyezik a kérésben használt szekvencia objektummal.

[ @sequence_max_value = ] sequence_max_value KIMENET

Az opcionális kimeneti paraméter a szekvenciaobjektum maximális értékét adja vissza. @sequence_max_value egy sql_variant típusú OUTPUT paraméter, amely ugyanazzal az alaptípussal, mint a kérésben használt szekvenciaobjektum.

Kódértékek visszaadása

0 (sikeres) vagy 1 (hiba).

Megjegyzések

sp_sequence_get_rangea sys sémában szerepel, és hivatkozható .sys.sp_sequence_get_range

Kerékpáros szekvenciák

Szükség esetén a sorozat objektum a megfelelő számú ciklust indítja a kívánt tartomány kiszolgálásához. A ciklusok számát a @range_cycle_count paraméteren keresztül visszaküldik a hívónak.

Megjegyzés:

Cikluskor egy sorozatobjektum újraindul a növekvő sorozat minimális értékéből és a csökkenő sorozat maximális értékéből, nem a sorozat objektumának kezdő értékéből.

Nem ciklusos szekvenciák

Ha a kért tartományban lévő értékek száma nagyobb, mint a sorozat objektumban maradt elérhető értékek, akkor a kért tartomány nem vonul le a sorozat objektumból, és a következő 11732-es hiba jelenik meg:

A "%.*ls" sorozatobjektum kért tartománya meghaladja a maximális vagy minimális korlátot. Próbálkozzon újra egy kisebb tartománnyal.

Permissions

Engedélyt igényel UPDATE a sorozatobjektumra vagy a sorozatobjektum sémájára.

Példák

Az alábbi példák egy szekvenciaobjektumot használnak, amelynek neve Test.RangeSeq. Használja az alábbi utasítást a sorozat létrehozásához 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. Szerezz egy sorozatérték-tartományt

A következő állítás négy sorozatszámot kap a Test.RangeSeq sorozatobjektumból, és az első számot adja vissza a felhasználónak.

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. Vissza kell adni az összes kimeneti paramétert

A következő példa visszaadja az eljárás összes kimeneti értékét 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;

Ha a @range_size argumentumot nagy számra változtatjuk, 75 például a sorozatobjektum ciklusát eredményezi. Ellenőrizd a @range_cycle_count argumentumot, hogy megállapítsd, hogy a sorozat objektum ciklusban volt-e és hányszor.

C. Példa ADO.NET használatával

A következő példa a Test.RangeSeq tartományból ADO.NET használatával kap egy tartományt.

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