Freigeben über


sp_sequence_get_range (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics

Gibt einen Bereich von Sequenzwerten eines Sequenzobjekts zurück. Das Sequenzobjekt generiert die angeforderte Anzahl der Werte, gibt diese aus und stellt Metadaten bezüglich des Bereichs für die Anwendung bereit.

Weitere Informationen zu Sequenznummern finden Sie unter "Sequenznummern".

Transact-SQL-Syntaxkonventionen

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

Argumente

[ @sequence_name = ] N'sequence_name'

Der Name des Sequenzobjekts. Das Schema ist optional. @sequence_name ist nvarchar(776) ohne Standard.

[ @range_size = ] range_size

Die Anzahl der Werte, die aus der Sequenz abgerufen werden sollen. @range_size ist großint, ohne Standard.

[ @range_first_value = ] range_first_value OUTPUT

Der Ausgabeparameter gibt den ersten Wert (Minimal- oder Maximalwert) des Sequenzobjekts zurück, mit dem der angeforderte Bereich berechnet wurde. @range_first_value ist ein OUTPUT-Parameter vom Typ sql_variant mit dem gleichen Basistyp wie das in der Anforderung verwendete Sequenzobjekt.

[ @range_last_value = ] range_last_value OUTPUT

Der optionale Ausgabeparameter gibt den letzten Wert des angeforderten Bereichs zurück. @range_last_value ist ein OUTPUT-Parameter vom Typ sql_variant mit dem gleichen Basistyp wie das in der Anforderung verwendete Sequenzobjekt.

[ @range_cycle_count = ] range_cycle_count OUTPUT

Der optionale Ausgabeparameter gibt die Anzahl der Durchläufe für das Sequenzobjekt zur Rückgabe des angeforderten Bereichs zurück. @range_cycle_count ist ein OUTPUT-Parameter vom Typ int.

[ @sequence_increment = ] sequence_increment OUTPUT

Der optionaler Ausgabeparameter gibt den inkrementellen Wert des Sequenzobjekts zurück, mit dem der angeforderte Bereich berechnet wird. @sequence_increment ist ein OUTPUT-Parameter vom Typ sql_variant mit dem gleichen Basistyp wie das in der Anforderung verwendete Sequenzobjekt.

[ @sequence_min_value = ] sequence_min_value OUTPUT

Der optionale Ausgabeparameter gibt den Minimalwert des Sequenzobjekts zurück. @sequence_min_value ist ein AUSGABEparameter vom Typ sql_variant mit demselben Basistyp wie das in der Anforderung verwendete Sequenzobjekt.

[ @sequence_max_value = ] sequence_max_value OUTPUT

Der optionale Ausgabeparameter gibt den Maximalwert des Sequenzobjekts zurück. @sequence_max_value ist ein OUTPUT-Parameter vom Typ sql_variant mit dem gleichen Basistyp wie das in der Anforderung verwendete Sequenzobjekt.

Rückgabecodewerte

0 (erfolgreich) oder 1 Fehler.

Hinweise

sp_sequence_get_range befindet sich im sys Schema und kann als sys.sp_sequence_get_rangereferenziert werden.

Zyklussequenzen

Bei Bedarf wechselt das Sequenzobjekt die entsprechende Anzahl von Malen, um den angeforderten Bereich zu bedienen. Die Häufigkeit, mit der ein Zyklus an den Aufrufer über den parameter @range_cycle_count zurückgegeben wird.

Hinweis

Der Durchlauf des Sequenzobjekts beginnt beim Minimalwert, wenn es sich um eine aufsteigende Sequenz handelt, und beim Maximalwert, wenn es sich um eine absteigende Sequenz handelt, nicht beim Startwert des Sequenzobjekts.

Nicht-zyklische Sequenzen

Wenn die Anzahl der Werte im angeforderten Bereich größer als die verbleibenden verfügbaren Werte im Sequenzobjekt ist, wird der angeforderte Bereich nicht vom Sequenzobjekt abgezogen, und der folgende Fehler 11732 wird zurückgegeben:

Der angeforderte Bereich für das Sequenzobjekt „%.*ls“ überschreitet den höchst- oder minimalen Grenzwert. Wiederholen Sie den Vorgang mit einem kleineren Bereich.

Berechtigungen

Erfordert UPDATE die Berechtigung für das Sequenzobjekt oder das Schema des Sequenzobjekts.

Beispiele

In den folgenden Beispielen wird ein Sequenzobjekt mit dem Namen Test.RangeSeqverwendet. Verwenden Sie die folgende Anweisung, um die Test.RangeSeq Sequenz zu erstellen.

CREATE SCHEMA Test;
GO

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

A. Abrufen eines Bereichs von Sequenzwerten

Die folgende Anweisung ruft vier Sequenznummern aus dem Test.RangeSeq-Sequenzobjekt ab und gibt den ersten der Zahlen an den Benutzer zurück.

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. Zurückgeben aller Ausgabeparameter

Im folgenden Beispiel werden alle Ausgabewerte aus der sp_sequence_get_range Prozedur zurückgegeben.

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;

Das Argument @range_size wird in eine große Zahl geändert, z75. B. bewirkt, dass das Sequenzobjekt gezyklust wird. Überprüfen Sie das argument @range_cycle_count , um festzustellen, ob und wie oft das Sequenzobjekt durchlaufen wurde.

C. Beispiel für die Verwendung von ADO.NET

Im folgenden Beispiel wird ein Bereich aus dem Test.RangeSeq mithilfe von ADO.NET abgerufen.

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