update intercalado
21/02/2012
0
select a.codEscola, count(*) as qtd from escolas a inner join alunos b on (a.codEscola = b.CodEscola) group by a.codEscola order by qtd
preciso varrer o resultado deste select usando um cursor para isso, só que dentro do loop preciso pegar o codEscola e dar um update em um campo, mas preciso fazer isso da seguinte forma:
suponha que eu tenha neste select 4 registros retornados conforme ordem de campos no select acima
1 2
2 5
3 7
4 10
agora preciso pegar o primeiro registro e dar um update (1,2) em seguida preciso pular para o ultimo registro(4,10) e dar outro update em seguida volto para o segundo rgistro(2,5) depois vou para o penultimo registro (3,7) e dou um update e assim por diante ....
Joao Moreira
Posts
23/02/2012
Marco Pinheiro
A sequencia de UPDATEs deve ser essa? Primeiro, quarto, segundo e terceiro?
Demonstre como você quer com um exemplo real. Como seria este update, o que será afetado?
Att.,
Marco.
23/02/2012
Joao Moreira
na primeira linha depois na ultima, na segunda linha depois na penultima, na terceira linha depois na antepenultima a assim vai....
declare cur_escolas cursor fast_forward for select a.estabelecimento, COUNT(*) as qtd from estabelecimento a inner join alunos b on (a.estabelecimento = b.id_escola) --where a.VENCIMENTO is null group by a.estabelecimento declare @codEscola int declare @qtd int = 0 declare @qtdInc int = 0 declare @dia int = 1 declare @sCods varchar(max) = declare @strSQL varchar(max) = open cur_escolas fetch next from cur_escolas into @codEscola,@qtd while (@@fetch_status != -1) begin set @qtdInc = @qtdInc + @qtd set @sCods = @sCods + CONVERT(varchar(10),@codEscola) + , if @qtdInc >= 28000 begin print convert(varchar(5),@dia) set @sCods = (+@sCods+SUBSTRING(@sCods,1,LEN(@sCods)-1)+) print @sCods set @strSQL = update ESTABELECIMENTO set VENCIMENTO = + Convert(varchar(5),@dia) + where estabelecimento in + @sCods execute(@strSQL) set @qtdInc = 0 set @sCods = set @dia = @dia + 1 end fetch next from cur_escolas into @codEscola, @qtd end close cur_escolas deallocate cur_escolas
23/02/2012
Joao Moreira
é mais ou menos assim nesse loop ai preciso dar os update naquela ordem que eu citei acima
na primeira linha depois na ultima, na segunda linha depois na penultima, na terceira linha depois na antepenultima a assim vai....
declare cur_escolas cursor fast_forward for select a.estabelecimento, COUNT(*) as qtd from estabelecimento a
inner join alunos b on (a.estabelecimento = b.id_escola) --where a.VENCIMENTO is null
group by a.estabelecimento
declare @codEscola int
declare @qtd int = 0
declare @qtdInc int = 0
declare @dia int = 1
declare @sCods varchar(max) =
declare @strSQL varchar(max) =
open cur_escolas
fetch next from cur_escolas into @codEscola,@qtd
while (@@fetch_status != -1)
begin
set @qtdInc = @qtdInc + @qtd
set @sCods = @sCods + CONVERT(varchar(10),@codEscola) + ,
if @qtdInc >= 28000
begin
print convert(varchar(5),@dia)
set @sCods = (+@sCods+SUBSTRING(@sCods,1,LEN(@sCods)-1)+)
print @sCods
set @strSQL = update ESTABELECIMENTO set VENCIMENTO = + Convert(varchar(5),@dia) +
where estabelecimento in + @sCods
execute(@strSQL)
set @qtdInc = 0
set @sCods =
set @dia = @dia + 1
end
fetch next from cur_escolas into @codEscola, @qtd
end
close cur_escolas
deallocate cur_escolas
Clique aqui para fazer login e interagir na Comunidade :)