1
resposta

Dúvida comparação lógica do cursor

Na comparação abaixo em negrito não deveria ser utilizado o "<="? Tenho a mesma duvida para os exemplos feitos durante a aula anterior. Por exemplo no caso da tabela de clientes, com 16 clientes, o contador sempre fara a comparação até o 15, deste modo, o ultimo item da lista, seja cliente, vendedor ou produto, nunca sera selecionado.


DECLARE @PRODUTO_ALEATORIO VARCHAR(12)
DECLARE @VAL_INICIAL INT
DECLARE @VAL_FINAL INT
DECLARE @ALEATORIO INT
DECLARE @CONTADOR INT
SET @CONTADOR = 1
SET @VAL_INICIAL = 1
SELECT @VAL_FINAL = COUNT(*) FROM [TABELA DE PRODUTOS]
SET @ALEATORIO = [dbo].[NumeroAleatorio](@VAL_INICIAL, @VAL_FINAL)
DECLARE CURSOR1 CURSOR FOR SELECT [CODIGO DO PRODUTO] 
    FROM [TABELA DE PRODUTOS]
OPEN CURSOR1
FETCH NEXT FROM CURSOR1 INTO @PRODUTO_ALEATORIO
**WHILE @CONTADOR < @ALEATORIO**
BEGIN
    FETCH NEXT FROM CURSOR1 INTO @PRODUTO_ALEATORIO
    SET @CONTADOR = @CONTADOR + 1
END
CLOSE CURSOR1
DEALLOCATE CURSOR1
SELECT @PRODUTO_ALEATORIO
1 resposta

Olá, Thales, tudo bem?

Peço desculpas pela demora no retorno.

Realmente você tem razão Thales, da forma como a consulta estava sendo executada, o último registro não seria retornado, é necessário o sinal de igualdade na cláusula WHILE, ficando da seguinte maneira:

WHILE @CONTADOR <= @ALEATORIO

Parabéns pela observação!

Esta atividade passou por uma revisão e já foi alterada.

Agradecemos o feedback e bons estudos!