sp_sequence_get_range (Transact-SQL)sp_sequence_get_range (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database síAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse noParallel Data Warehouse

Devuelve un intervalo de valores de secuencia de un objeto de secuencia.Returns a range of sequence values from a sequence object. El objeto de secuencia genera y emite el número de valores solicitados y proporciona a la aplicación metadatos relacionados con el intervalo.The sequence object generates and issues the number of values requested and provides the application with metadata related to the range.

Para obtener más información acerca de los números de secuencia, vea números de secuencia.For a more information about sequence numbers, see Sequence Numbers.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

  
sp_sequence_get_range [ @sequence_name = ] N'<sequence>'   
     , [ @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 ]  
    [ ; ]  

ArgumentosArguments

[ @sequence_name = ] N'sequence' El nombre del objeto de secuencia.[ @sequence_name = ] N'sequence' The name of the sequence object. El esquema es opcional.The schema is optional. sequence_name es nvarchar(776) .sequence_name is nvarchar(776).

[ @range_size = ] range_size El número de valores para capturar de la secuencia.[ @range_size = ] range_size The number of values to fetch from the sequence. @range_size** es bigint.@range_size** is bigint.

[ @range_first_value = ] range_first_value Parámetro de salida devuelve el primer valor (mínimo o máximo) del objeto de secuencia utilizado para calcular el intervalo solicitado.[ @range_first_value = ] range_first_value Output parameter returns the first (minimum or maximum) value of the sequence object used to calculate the requested range. @range_first_value** es sql_variant con el mismo tipo base del objeto de secuencia utilizado en la solicitud.@range_first_value** is sql_variant with the same base type as that of the sequence object used in the request.

[ @range_last_value = ] range_last_value Parámetro de salida opcional devuelve el último valor del intervalo solicitado.[ @range_last_value = ] range_last_value Optional output parameter returns the last value of the requested range. @range_last_value** es sql_variant con el mismo tipo base del objeto de secuencia utilizado en la solicitud.@range_last_value** is sql_variant with the same base type as that of the sequence object used in the request.

[ @range_cycle_count = ] range_cycle_count Parámetro de salida opcional devuelve el número de veces que recorre el objeto de secuencia con el fin de devolver el intervalo solicitado.[ @range_cycle_count = ] range_cycle_count Optional output parameter returns the number of times that the sequence object cycled in order to return the requested range. @range_cycle_count** es int.@range_cycle_count** is int.

[ @sequence_increment = ] sequence_increment Parámetro de salida opcional devuelve el incremento del objeto de secuencia utilizado para calcular el intervalo solicitado.[ @sequence_increment = ] sequence_increment Optional output parameter returns the increment of the sequence object used to calculate the requested range. @sequence_increment** es sql_variant con el mismo tipo base del objeto de secuencia utilizado en la solicitud.@sequence_increment** is sql_variant with the same base type as that of the sequence object used in the request.

[ @sequence_min_value = ] sequence_min_value Parámetro de salida opcional devuelve el valor mínimo del objeto de secuencia.[ @sequence_min_value = ] sequence_min_value Optional output parameter returns the minimum value of the sequence object. @sequence_min_value** es sql_variant con el mismo tipo base del objeto de secuencia utilizado en la solicitud.@sequence_min_value** is sql_variant with the same base type as that of the sequence object used in the request.

[ @sequence_max_value = ] sequence_max_value Parámetro de salida opcional devuelve el valor máximo del objeto de secuencia.[ @sequence_max_value = ] sequence_max_value Optional output parameter returns the maximum value of the sequence object. @sequence_max_value** es sql_variant con el mismo tipo base del objeto de secuencia utilizado en la solicitud.@sequence_max_value** is sql_variant with the same base type as that of the sequence object used in the request.

Valores de código de retornoReturn Code Values

0 (correcto) o 1 (error)0 (success) or 1 (failure)

ComentariosRemarks

sp_sequence_get_rangeis en sys.sp_sequence_get_rangeis in the sys. esquema y se puede hacer referencia como sys.sp_sequence_get_range.schema and can be referenced as sys.sp_sequence_get_range.

Secuencias con recorridoCycling sequences

Si es necesario, el objeto de secuencia hará el recorrido el número adecuado de veces para atender el intervalo solicitado.If required, the sequence object will cycle the appropriate number of times to service the requested range. El número de veces que se recorre se devuelve al autor de llamada a través del parámetro @range_cycle_count.The number of times cycled is returned to the caller through the @range_cycle_count parameter.

Nota

Al hacer el recorrido, un objeto de flujo se reinicia desde el valor mínimo en el caso de una secuencia ascendente y desde el valor máximo si se trata de una secuencia descendente, no desde el valor inicial del objeto de secuencia.When cycling, a sequence object restarts from the minimum value for an ascending sequence and the maximum value for a descending sequence, not from the start value of the sequence object.

Secuencias sin recorridoNon-cycling sequences

Si el número de valores del intervalo solicitado es mayor que los valores disponibles restantes en el objeto de secuencia, el intervalo solicitado no se deduce del objeto de secuencia y se devuelve el siguiente error 11732:If the number of values in the requested range is greater than the remaining available values in the sequence object the requested range is not deducted from the sequence object and the following error 11732 is returned:

The requested range for sequence object '%.*ls' exceeds the maximum or minimum limit. Retry with a smaller range.

PermisosPermissions

Se necesita el permiso UPDATE en el objeto de secuencia o el esquema del objeto de secuencia.Requires UPDATE permission on the sequence object or the schema of the sequence object.

EjemplosExamples

Los ejemplos siguientes usan un objeto de secuencia denominado Test.RangeSeq.The following examples use a sequence object named Test.RangeSeq. Use la siguiente instrucción para crear la secuencia Test.RangeSeq.Use the following statement to create the Test.RangeSeq sequence.

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

A.A. Recuperar un intervalo de valores de secuenciaRetrieving a range of sequence values

La siguiente instrucción obtiene cuatro números de secuencia del objeto de secuencia Test.RangeSeq y devuelve el primero de los números al usuario.The following statement gets four sequence numbers from the Test.RangeSeq sequence object and returns the first of the numbers to the user.

DECLARE @range_first_value sql_variant ,   
        @range_first_value_output sql_variant ;  
  
EXEC 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.B. Devolver todos los parámetros de salidaReturning all output parameters

El ejemplo siguiente devuelve todos los valores de salida del procedimiento sp_sequence_get_range.The following example returns all the output values from the sp_sequence_get_range procedure.

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 ;  
  

Cambiar el argumento @range_size a un número grande como 75 hará que el objeto de secuencia haga un recorrido.Changing the @range_size argument to a large number such as 75 will cause the sequence object to cycle. Compruebe el argumento @range_cycle_count para determinar si se ha recorrido el objeto de secuencia y, en caso afirmativo, cuántas veces.Check the @range_cycle_count argument to determine if and how many times the sequence object has cycled.

C.C. Ejemplo utilizando ADO.NETExample using ADO.NET

En el ejemplo siguiente se obtiene un intervalo de la Test.RangeSeq mediante ADO.NET.The following example gets a range from the Test.RangeSeq by using 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 retreive 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);  
  

Vea tambiénSee Also

CREATE SEQUENCE (Transact-SQL) CREATE SEQUENCE (Transact-SQL)
ALTER SEQUENCE (Transact-SQL) ALTER SEQUENCE (Transact-SQL)
DROP SEQUENCE (Transact-SQL) DROP SEQUENCE (Transact-SQL)
NEXT VALUE FOR (Transact-SQL) NEXT VALUE FOR (Transact-SQL)
Números de secuenciaSequence Numbers