1
resposta

Dúvida Comparação Lógica WHILE

Nas aulas o professor utiliza como condição de comparação do WHILE apenas o '<', porém na resposta do exercício está sendo utilizado o '<=' (menor ou igual), dessa forma não estaria incorreta?

Pois, antes de entrarmos no laço WHILE, o cursor já está na primeira posição, então se por acaso o número aleatório retornar 1, teremos WHILE 1 <= 1, essa condição será TRUE e o cursos irá retornar o 2 elemento o que estará incorreto. Fiz um teste utilizando o '<=' no WHILE e notei que o cliente retornado é o segundo, isso setando a variável @ALEATORIO como 1.

-- CLIENTE ALEATORIO

DECLARE @CLIENTE_ALEATORIO VARCHAR(12)
DECLARE @VENDEDOR_ALEATORIO VARCHAR(12)
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 CLIENTES]
SET @ALEATORIO = [dbo].[NumeroAleatorio](@VAL_INICIAL, @VAL_FINAL)
SET @ALEATORIO = 1 -- DEVERIA RETORNAR O PRIMEIRO CLIENTE
DECLARE CURSOR1 CURSOR FOR SELECT CPF FROM [TABELA DE CLIENTES]
OPEN CURSOR1
FETCH NEXT FROM CURSOR1 INTO @CLIENTE_ALEATORIO
WHILE @CONTADOR <= @ALEATORIO
BEGIN
   FETCH NEXT FROM CURSOR1 INTO @CLIENTE_ALEATORIO
   SET @CONTADOR = @CONTADOR + 1
END
CLOSE CURSOR1
DEALLOCATE CURSOR1
SELECT @CLIENTE_ALEATORIO
1 resposta

Concordo com o Victor. Nesse tópico https://cursos.alura.com.br/forum/topico-duvida-comparacao-logica-do-cursor-182233 eu acho que foi respondido equivocadamente.