sp_sequence_get_range (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Mengembalikan rentang nilai urutan dari objek urutan. Objek urutan menghasilkan dan mengeluarkan jumlah nilai yang diminta dan menyediakan aplikasi dengan metadata yang terkait dengan rentang.

Untuk informasi selengkapnya tentang nomor urut, lihat Nomor Urutan.

Konvensi sintaks transact-SQL

Sintaks

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

Argumen

[ @sequence_name = ] N'sequence_name'

Nama objek urutan. Skema bersifat opsional. @sequence_name adalah nvarchar(776), tanpa default.

[ @range_size = ] range_size

Jumlah nilai yang diambil dari urutan. @range_size besar, tanpa default.

[ @range_first_value = ] range_first_value OUTPUT

Parameter output mengembalikan nilai pertama (minimum atau maksimum) dari objek urutan yang digunakan untuk menghitung rentang yang diminta. @range_first_value adalah parameter OUTPUT dari jenis sql_variant, dengan jenis dasar yang sama dengan objek urutan yang digunakan dalam permintaan.

[ @range_last_value = ] range_last_value OUTPUT

Parameter output opsional mengembalikan nilai terakhir dari rentang yang diminta. @range_last_value adalah parameter OUTPUT dari jenis sql_variant, dengan jenis dasar yang sama dengan objek urutan yang digunakan dalam permintaan.

[ @range_cycle_count = ] range_cycle_count OUTPUT

Parameter output opsional mengembalikan berapa kali objek urutan di-siklus untuk mengembalikan rentang yang diminta. @range_cycle_count adalah parameter OUTPUT dari jenis int.

[ @sequence_increment = ] sequence_increment OUTPUT

Parameter output opsional mengembalikan kenaikan objek urutan yang digunakan untuk menghitung rentang yang diminta. @sequence_increment adalah parameter OUTPUT dari jenis sql_variant, dengan jenis dasar yang sama dengan objek urutan yang digunakan dalam permintaan.

[ @sequence_min_value = ] sequence_min_value OUTPUT

Parameter output opsional mengembalikan nilai minimum objek urutan. @sequence_min_value adalah parameter OUTPUT dari jenis sql_variant, dengan jenis dasar yang sama dengan objek urutan yang digunakan dalam permintaan.

[ @sequence_max_value = ] sequence_max_value OUTPUT

Parameter output opsional mengembalikan nilai maksimum objek urutan. @sequence_max_value adalah parameter OUTPUT dari jenis sql_variant, dengan jenis dasar yang sama dengan objek urutan yang digunakan dalam permintaan.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_sequence_get_range berada dalam sys skema, dan dapat dirujuk sebagai sys.sp_sequence_get_range.

Urutan bersepeda

Jika perlu, objek urutan siklus berapa kali yang sesuai untuk melayani rentang yang diminta. Berapa kali siklus dikembalikan ke pemanggil melalui parameter @range_cycle_count .

Catatan

Saat bersepeda, objek urutan dimulai ulang dari nilai minimum untuk urutan naik dan nilai maksimum untuk urutan turun, bukan dari nilai awal objek urutan.

Urutan non-bersepeda

Jika jumlah nilai dalam rentang yang diminta lebih besar dari nilai yang tersedia yang tersisa dalam objek urutan, rentang yang diminta tidak dikurangi dari objek urutan, dan kesalahan berikut 11732 dikembalikan:

Rentang yang diminta untuk objek urutan '%.*ls' melebihi batas maksimum atau minimum. Coba lagi dengan rentang yang lebih kecil.

Izin

UPDATE Memerlukan izin pada objek urutan atau skema objek urutan.

Contoh

Contoh berikut menggunakan objek urutan bernama Test.RangeSeq. Gunakan pernyataan berikut untuk membuat Test.RangeSeq urutan.

CREATE SCHEMA Test;
GO

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

J. Mengambil rentang nilai urutan

Pernyataan berikut mendapatkan empat angka urutan dari objek urutan Test.RangeSeq dan mengembalikan angka pertama kepada pengguna.

DECLARE @range_first_value_output SQL_VARIANT;

EXEC 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. Mengembalikan semua parameter output

Contoh berikut mengembalikan semua nilai output dari sp_sequence_get_range prosedur.

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

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

Mengubah argumen @range_size menjadi angka besar seperti 75 menyebabkan objek urutan berputar. Periksa argumen @range_cycle_count untuk menentukan apakah dan berapa kali objek urutan telah bersepeda.

C. Contoh menggunakan ADO.NET

Contoh berikut mendapatkan rentang dari Test.RangeSeq dengan menggunakan 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);