none
Função com While RRS feed

  • Pergunta

  • Fiz um função que faz um select em uma tabela

    mas como na função posso percorrer o select registro aa registro usando while?

    sexta-feira, 7 de agosto de 2015 12:05

Respostas

  • Existem muitas formas de fazer isso.. A única que vc deve sempre evitar é o uso de cursor!

    Segue um exemplo usando While.

    DECLARE @COD_AUX AS INT
    DECLARE @TOTAL AS INT
    
    SELECT @TOTAL = COUNT(COD_USUARIO)
    FROM TABELA
    SET @CONTADOR = 1
    
    WHILE @CONTADOR <= @TOTAL
    	BEGIN
    		IF @CONTADOR = 1
    			BEGIN 
    				SET @COD_AUX = 0
    			END
    			
    			SELECT TOP 1
    					@COD = COD_USUARIO
    			FROM TABELA
    			WHERE COD_USUARIO > @COD_AUX
    			ORDER BY COD_USUARIO
    			SET @COD_AUX = @COD
    			
    			SELECT TOP 1
    					*
    			FROM TABELA
    			WHERE COD_USUARIO = @COD
    			ORDER BY COD_USUARIO
    			SET @CONTADOR = CONTADOR + 1
    	END



    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Sugerido como Resposta Lucio Rogerio SPBanned segunda-feira, 10 de agosto de 2015 14:31
    • Marcado como Resposta jceoms segunda-feira, 10 de agosto de 2015 17:31
    segunda-feira, 10 de agosto de 2015 13:15

Todas as Respostas

  • Bom dia jceoms,

    tudo bem?

    Não sei se compreendi muito bem o que precisa fazer, mas peço que de uma olhada nesta outra thread.

    Espero ter compreendido e auxiliado.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 7 de agosto de 2015 13:01
  • Bom dia jceoms,

    Você pode usar um cursor. Segue um exemplo:

    DECLARE #cursor CURSOR FOR SELECT Chapa, nome from Funcionarios --(aqui vai seu select)
    OPEN #cursor
    
    --VARIÁVEIS QUE VÃO RECEBER OS VALORES DOS CAMPOS DO SEU SELECT
    DECLARE @codigo INT
    DECLARE @nome INT
    
    --CARREGA OS DADOS DO PRIMEIRO REGISTRO
    FETCH NEXT FROM #cursor INTO @codigo, @nome
    
    WHILE @@FETCH_STATUS = 0 --ENQUANTO TIVER DADOS
    BEGIN
    	
    	--(FAZ ALGUMA COISA AQUI...)
    
    	--CARREGA O PROXIMO REGISTRO
    	FETCH NEXT FROM #cursor INTO @codigo, @nome
    END
    
    CLOSE #cursor
    DEALLOCATE #cursor



    • Editado João Otávio A sexta-feira, 7 de agosto de 2015 13:18 Linguagem errada
    sexta-feira, 7 de agosto de 2015 13:17
  • Existem muitas formas de fazer isso.. A única que vc deve sempre evitar é o uso de cursor!

    Segue um exemplo usando While.

    DECLARE @COD_AUX AS INT
    DECLARE @TOTAL AS INT
    
    SELECT @TOTAL = COUNT(COD_USUARIO)
    FROM TABELA
    SET @CONTADOR = 1
    
    WHILE @CONTADOR <= @TOTAL
    	BEGIN
    		IF @CONTADOR = 1
    			BEGIN 
    				SET @COD_AUX = 0
    			END
    			
    			SELECT TOP 1
    					@COD = COD_USUARIO
    			FROM TABELA
    			WHERE COD_USUARIO > @COD_AUX
    			ORDER BY COD_USUARIO
    			SET @COD_AUX = @COD
    			
    			SELECT TOP 1
    					*
    			FROM TABELA
    			WHERE COD_USUARIO = @COD
    			ORDER BY COD_USUARIO
    			SET @CONTADOR = CONTADOR + 1
    	END



    Flávio Farias
    "May the Force be with you"
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    • Sugerido como Resposta Lucio Rogerio SPBanned segunda-feira, 10 de agosto de 2015 14:31
    • Marcado como Resposta jceoms segunda-feira, 10 de agosto de 2015 17:31
    segunda-feira, 10 de agosto de 2015 13:15