1
resposta

[Dúvida] Erro resultado

Pq o código abaixo apresenta um resultado errado? Insira aqui a descrição dessa imagem para ajudar na acessibilidade

DECLARE @number_NF INT,
        @index_number INT = 1,
        @max_number INT = 100000;

DECLARE @table_numbers TABLE(NUMERO_NF INTEGER, EXISTENCIA VARCHAR(25));

SET NOCOUNT ON
WHILE @index_number <= @max_number
BEGIN
    SELECT @number_NF = NUMERO 
    FROM [NOTAS FISCAIS] WHERE NUMERO = @index_number

    IF @number_NF IS NOT NULL 
        INSERT INTO @table_numbers VALUES(@index_number, 'Existe')
    ELSE
        INSERT INTO @table_numbers VALUES(@index_number, 'Não existe')

    SET @index_number = @index_number + 1
END

SELECT * FROM @table_numbers ORDER BY NUMERO_NF DESC
1 resposta

Oola, o problema potencial está no fato de que você está usando a variável @number_NF para armazenar o valor da nota fiscal recuperada do banco de dados. No entanto, você nunca limpa ou redefine essa variável em cada iteração do loop. Isso significa que, se a consulta dentro do loop não encontrar uma correspondência para o @index_number, o valor @number_NF ainda conterá o valor da iteração anterior, potencialmente causando resultados incorretos na inserção na tabela @table_numbers.

Para corrigir isso, você pode add uma instrução SET @number_NF = NULL; no início do loop, para garantir que @number_NF seja limpo em cada iteração.

DECLARE @number_NF INT,
        @index_number INT = 1,
        @max_number INT = 100000;

DECLARE @table_numbers TABLE(NUMERO_NF INTEGER, EXISTENCIA VARCHAR(25));

SET NOCOUNT ON
WHILE @index_number <= @max_number
BEGIN
    SET @number_NF = NULL; -- Limpar a variável @number_NF

    SELECT @number_NF = NUMERO 
    FROM [NOTAS FISCAIS] WHERE NUMERO = @index_number

    IF @number_NF IS NOT NULL 
        INSERT INTO @table_numbers VALUES(@index_number, 'Existe')
    ELSE
        INSERT INTO @table_numbers VALUES(@index_number, 'Não existe')

    SET @index_number = @index_number + 1
END

SELECT * FROM @table_numbers ORDER BY NUMERO_NF DESC

vlw!