Aracılığıyla paylaş


sp_sequence_get_range (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'de Azure Synapse AnalyticsSQL veritabanı

Bir dizi nesnesinden bir dizi değer aralığı döner. Dizi nesnesi, istenen değer sayısını oluşturur ve verir, uygulamaya aralıkla ilgili meta veri sağlar.

Dizi numaraları hakkında daha fazla bilgi için bkz. Dizi Numaraları.

Transact-SQL söz dizimi kuralları

Sözdizimi

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'

Dizi nesnesinin adı. Şema isteğe bağlıdır. @sequence_namenvarchar(776)'dır ve varsayılan yoktur.

[ @range_size = ] range_size

Diziden alınacak değer sayısı. @range_sizebüyük ve varsayılan yok.

[ @range_first_value = ] range_first_value ÇIKIŞ

Çıkış parametresi, istenen aralığı hesaplamak için kullanılan dizi nesnesinin ilk (minimum veya maksimum) değerini döndürür. @range_first_value , sql_variant tipte bir OUTPUT parametresidir ve isteğinde kullanılan dizi nesnesiyle aynı temel tipe sahiptir.

[ @range_last_value = ] range_last_value ÇIKIŞ

İsteğe bağlı çıktı parametresi, istenen aralığın son değerini döndürür. @range_last_value , sql_variant tipte bir OUTPUT parametresidir ve istekte kullanılan dizi nesnesiyle aynı temel tipe sahiptir.

[ @range_cycle_count = ] range_cycle_count ÇIKIŞ

Isteğe bağlı çıktı parametresi, dizi nesnesinin istenen aralığı döndürmek için kaç kez döngü yaptığı sayısını döndürür. @range_cycle_count , int tipte bir OUTPUT parametresidir.

[ @sequence_increment = ] sequence_increment ÇIKIŞ

İsteğe bağlı çıktı parametresi, istenen aralığı hesaplamak için kullanılan dizi nesnesinin artışını döndürür. @sequence_increment , sql_variant tipte bir OUTPUT parametresidir ve istekte kullanılan sıralı nesneyle aynı temel tipe sahiptir.

[ @sequence_min_value = ] sequence_min_value ÇIKIŞ

İsteğe bağlı çıktı parametresi, dizi nesnesinin minimum değerini döndürür. @sequence_min_value , sql_variant tipinde bir OUTPUT parametresidir ve isteğinde kullanılan dizi nesnesiyle aynı temel tipe sahiptir.

[ @sequence_max_value = ] sequence_max_value ÇIKIŞ

İsteğe bağlı çıktı parametresi, dizi nesnesinin maksimum değerini döndürür. @sequence_max_value , istek içinde kullanılan sıralı nesneyle aynı temel tipe sahip sql_variant tipte bir OUTPUT parametresidir.

Dönüş kodu değerleri

0 (başarı) veya 1 (başarısızlık).

Açıklamalar

sp_sequence_get_rangeşemada sys yer alır ve olarak referans verilebilir.sys.sp_sequence_get_range

Bisiklet dizileri

Gerekirse, dizi nesnesi istenen aralığı hizmet etmek için uygun sayıda kez döngü yapar. Döngü sayısı @range_cycle_count parametresi aracılığıyla arayana geri verilir.

Uyarı

Döngü yapılırken, bir dizi nesnesi artan bir dizinin minimum değerinden ve azalan bir dizinin maksimum değerinden yeniden başlar, dizi nesnesinin başlangıç değerinden değil.

Döngü dışı diziler

İstenen aralıktaki değer sayısı, dizi nesnesinde kalan mevcut değerlerden daha fazlaysa, istenen aralık dizi nesnesinden düşüldü ve aşağıdaki 11732 hatası geri döner:

'%.*ls' sıra nesnesi için istenen aralık üst sınırı veya en düşük sınırı aşıyor. Daha küçük bir aralıkla yeniden deneyin.

Permissions

Dizi nesnesi veya dizi nesnesinin şeması üzerinde izin gerektirir UPDATE .

Örnekler

Aşağıdaki örnekler, . Test.RangeSeqadlı bir dizi nesnesini kullanır. Diziyi Test.RangeSeq oluşturmak için aşağıdaki ifadeyi kullanın.

CREATE SCHEMA Test;
GO

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

A. Bir dizi değer aralığı elde edin

Aşağıdaki ifade, Test.RangeSeq dizisi nesnesinden dört dizi numarası alır ve numaraların ilkini kullanıcıya döndürür.

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. Tüm çıkış parametrelerini döndür

Aşağıdaki örnek, prosedürden sp_sequence_get_range tüm çıktı değerlerini geri döndürür.

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;

@range_size argümanını büyük bir sayıya dönüştürmek, 75 örneğin dizi nesnesinin döngüsüne neden olur. Dizi nesnesinin kaç kez döngüye girdiğini ve kaç kez döndüğünü anlamak için @range_cycle_count argümanını kontrol edin.

C. Örnek ADO.NET

Aşağıdaki örnek, ADO.NET kullanılarak Test.RangeSeq'ten bir aralık alır.

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