Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
Banco de Dados SQL do Azure Synapse Analytics
no Microsoft Fabric
Devolve um intervalo de valores de sequência a partir de um objeto de sequência. O objeto de sequência gera e emite o número de valores solicitados e fornece à aplicação metadados relacionados com o intervalo.
Para mais informações sobre números de sequência, consulte Números de Sequência.
Transact-SQL convenções de sintaxe
Sintaxe
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'
O nome do objeto de sequência. O esquema é opcional. @sequence_name é nvarchar(776), sem padrão.
[ @range_size = ] range_size
O número de valores a obter da sequência. @range_size é bigint, sem padrão.
[ @range_first_value = ] range_first_value SAÍDA
O parâmetro de saída devolve o primeiro valor (mínimo ou máximo) do objeto de sequência usado para calcular o intervalo solicitado. @range_first_value é um parâmetro OUTPUT do tipo sql_variant, com o mesmo tipo base do objeto de sequência usado no pedido.
[ @range_last_value = ] range_last_value SAÍDA
O parâmetro de saída opcional devolve o último valor do intervalo solicitado. @range_last_value é um parâmetro OUTPUT do tipo sql_variant, com o mesmo tipo base do objeto de sequência usado no pedido.
[ @range_cycle_count = ] range_cycle_count SAÍDA
O parâmetro de saída opcional devolve o número de vezes que o objeto de sequência ciclou para devolver o intervalo solicitado. @range_cycle_count é um parâmetro OUTPUT do tipo int.
[ @sequence_increment = ] sequence_increment SAÍDA
O parâmetro de saída opcional devolve o incremento do objeto de sequência usado para calcular o intervalo solicitado. @sequence_increment é um parâmetro OUTPUT do tipo sql_variant, com o mesmo tipo base do objeto de sequência usado no pedido.
[ @sequence_min_value = ] sequence_min_value SAÍDA
O parâmetro de saída opcional devolve o valor mínimo do objeto de sequência. @sequence_min_value é um parâmetro OUTPUT do tipo sql_variant, com o mesmo tipo base do objeto de sequência usado no pedido.
[ @sequence_max_value = ] sequence_max_value SAÍDA
O parâmetro de saída opcional devolve o valor máximo do objeto de sequência. @sequence_max_value é um parâmetro OUTPUT do tipo sql_variant, com o mesmo tipo base do objeto de sequência usado no pedido.
Valores de código de retorno
0 (sucesso) ou 1 (fracasso).
Observações
sp_sequence_get_range está no sys esquema, e pode ser referenciado como sys.sp_sequence_get_range.
Sequências de ciclismo
Se necessário, o objeto de sequência cicla o número apropriado de vezes para servir o intervalo solicitado. O número de vezes cicladas é devolvido ao chamador através do parâmetro @range_cycle_count .
Observação
Ao ciclar, um objeto de sequência reinicia a partir do valor mínimo para uma sequência ascendente e do valor máximo para uma sequência descendente, não a partir do valor inicial do objeto de sequência.
Sequências não cicláveis
Se o número de valores no intervalo solicitado for maior do que os valores restantes disponíveis no objeto de sequência, o intervalo solicitado não é deduzido do objeto de sequência, e o seguinte erro 11732 é devolvido:
O intervalo solicitado para o objeto de sequência '%.*ls' excede o limite máximo ou mínimo. Tente novamente com um intervalo menor.
Permissions
Requer UPDATE permissão sobre o objeto de sequência ou o esquema do objeto de sequência.
Examples
Os exemplos seguintes usam um objeto de sequência chamado Test.RangeSeq. Use a seguinte instrução para criar a Test.RangeSeq sequência.
CREATE SCHEMA Test;
GO
CREATE SEQUENCE Test.RangeSeq
AS INT
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 25
CYCLE
CACHE 10;
A. Recuperar um intervalo de valores de sequência
A seguinte instrução recebe quatro números de sequência do objeto de sequência Test.RangeSeq e devolve o primeiro dos números ao utilizador.
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. Devolver todos os parâmetros de saída
O exemplo seguinte devolve todos os valores de saída do sp_sequence_get_range procedimento.
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;
Mudar o argumento @range_size para um número grande, como , 75 faz com que o objeto de sequência cicle. Verifique o argumento @range_cycle_count para determinar se e quantas vezes o objeto de sequência ciclou.
C. Exemplo a usar ADO.NET
O exemplo seguinte obtém um intervalo do Test.RangeSeq usando 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);