Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FABIO JUNIOR LAMPUGNANI

Substituir cursor por while em uma função

Recommended Posts

Olá a todos neste fórum.

 

Procurei muito na web exemplos que possibilitam substituir o famoso cursor pelo while. Encontrei este exemplo:

declare @count bigintset rowcount 0select au_id,au_lname,au_fname into #mytemp from authorsset rowcount 1select @count = au_id from #mytempwhile @@rowcount <> 0begin   set rowcount 0   select au_id,au_lname,au_fname from #mytemp where au_id = @count   delete #mytemp where au_id = @count   set rowcount 1   select @count = au_id from #mytempendset rowcount 0

 

Veja que ele deleta o registro da tabela virtual #mytemp e em uma função tabular isso não é permitido.

 

 

Alguém teria alguma forma de fazer isto?

 

 

 

 

Agradeço desde já.

Muito Obrigado

Att. Fábio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fábio, bem vindo ao fórum.

Eu utilizo muito este exemplo e inclusive postei ele em meu blog pessoal:

http://adjuniordba.wordpress.com/2013/07/04/while-para-cursores/

 

Em relação a função tabular, é possível substituir por procedure? No caso, pode-se utilizar o OUTPUT para mandar o retorno para variáveis.

 

Eu nunca testei em função tabular, vou tentar fazer algo mais tarde, pois estou sem ambiente para teste.

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites
Jr muito obrigado pela ajuda.

Depois de algumas tentativas consegui fazer da seguinte forma:


Declare @temptable(Code Identity(1,1),Campo1 int, Campo2 nVarchar(50), Campo3 int)

Declare @Count int, @CountTable int

Declare @Campo1 int, @Campo2 nVarchar(50), @Campo3 int


insert into @temptable select Campo1, Campo2, Campo3 from tabela where campo = #


select @CountTable = Count(*) from @temptable

set @Count = 1


while (@CountTable >= @Count)

begin

select @Campo1 = Campo1, @Campo2 = Campo2, @Campo3 = Campo3 from @temptable where Code = @Count



set @Count = (@Count + 1)

end



Att. Fábio

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.