USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  desafio SQL 2000
Martini
Pontos: 2843 Pontos: 2843
PAROBÉ
RS - BRASIL
Postada em 04/07/2006 14:27 hs         
Pessoal,
 
olha eu tenho duas tabelas, a cre e cre_aux, a cre_aux vai receber os dados antes de serem enviados para a cre ... o que eu preciso é atualizar na cre_aux o número do título de forma sequencial por prefixo e parcela sem usar um cursor (só update) ... no script "sem erro" eu insero os dados de forma correta (sequencialmente por prefixo e parcela) daí o script funciona, mas no script "com erro" eu insiro desordenado e o sistema não atualiza certo (executem e vejam) ... alguém tem uma idéia?
 
--***** sem erro *****
create table #CRE
 (
  Prefixo Varchar(3),
  Parcela Varchar(1),
  Numero Varchar(6)
 )

create table #CRE_Aux
 (
  Prefixo Varchar(3),
  Parcela Varchar(1),
  Numero Varchar(6)
 )

set nocount on
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'A', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'A', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'B', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'B', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'B', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'C', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'C', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'D', '')
-- declare @contador as numeric
-- set @contador = -1
-- update Teste set Coluna1 = @contador + 1, @contador = @contador +1

declare @aux varchar(6)
declare @inc integer
declare @Prefixo Varchar(3)
declare @Parcela Varchar(1)
declare @PrefixoAnt Varchar(3)
declare @ParcelaAnt Varchar(1)
set @aux = '000000'
set @inc = 1
set @PrefixoAnt = ''
set @ParcelaAnt = ''
update #CRE_Aux
 Set #CRE_Aux.Numero = Right('000000' + Cast(@aux as varchar), 6)
 , @Prefixo = #CRE_Aux.Prefixo
 , @Parcela = #CRE_Aux.Parcela
 , @inc =
  case
   when (@Prefixo <> @PrefixoAnt Or @Parcela <> @ParcelaAnt) then 1
   when (@PrefixoAnt = '' Or @ParcelaAnt = '') then 1
   else @inc + 1
  end
 , @aux = Right('000000' + Cast(Coalesce(a.Numero, '000000') + @inc As Varchar), 6)
 , @PrefixoAnt = #CRE_Aux.Prefixo
 , @ParcelaAnt = #CRE_Aux.Parcela
from #CRE_Aux
left join (
select
 Prefixo,
 Parcela,
 Max(Numero) Numero
from #CRE
group by Prefixo, Parcela
)a on a.Prefixo = #CRE_Aux.Prefixo
And a.Parcela = #CRE_Aux.Parcela
select * from #CRE_Aux order by Prefixo, Parcela, Numero
drop table #CRE
drop table #CRE_Aux
 
--***** com erro *****
create table #CRE
 (
  Prefixo Varchar(3),
  Parcela Varchar(1),
  Numero Varchar(6)
 )

create table #CRE_Aux
 (
  Prefixo Varchar(3),
  Parcela Varchar(1),
  Numero Varchar(6)
 )

set nocount on
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'A', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'B', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'B', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'B', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'C', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'A', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'D', '')
insert into #CRE_Aux (Prefixo, Parcela, Numero) Values ('PAR', 'C', '')
-- declare @contador as numeric
-- set @contador = -1
-- update Teste set Coluna1 = @contador + 1, @contador = @contador +1

declare @aux varchar(6)
declare @inc integer
declare @Prefixo Varchar(3)
declare @Parcela Varchar(1)
declare @PrefixoAnt Varchar(3)
declare @ParcelaAnt Varchar(1)
set @aux = '000000'
set @inc = 1
set @PrefixoAnt = ''
set @ParcelaAnt = ''
update #CRE_Aux
 Set #CRE_Aux.Numero = Right('000000' + Cast(@aux as varchar), 6)
 , @Prefixo = #CRE_Aux.Prefixo
 , @Parcela = #CRE_Aux.Parcela
 , @inc =
  case
   when (@Prefixo <> @PrefixoAnt Or @Parcela <> @ParcelaAnt) then 1
   when (@PrefixoAnt = '' Or @ParcelaAnt = '') then 1
   else @inc + 1
  end
 , @aux = Right('000000' + Cast(Coalesce(a.Numero, '000000') + @inc As Varchar), 6)
 , @PrefixoAnt = #CRE_Aux.Prefixo
 , @ParcelaAnt = #CRE_Aux.Parcela
from #CRE_Aux
left join (
select
 Prefixo,
 Parcela,
 Max(Numero) Numero
from #CRE
group by Prefixo, Parcela
)a on a.Prefixo = #CRE_Aux.Prefixo
And a.Parcela = #CRE_Aux.Parcela
select * from #CRE_Aux order by Prefixo, Parcela, Numero
drop table #CRE
drop table #CRE_Aux
 
 
obrigado
     
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2025   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página