¿ Como hacer este update...?

27/04/2004 - 16:58 por Eusebio | Informe spam
hola grupo,



Solucioné el problema que expongo a continuación, pero usando un cursor, lo
cual he visto con mucha frecuencia en este foro que no es la manera más
recomendable por rendimiento. Lo que estoy buscando es una manera de hacerlo
que mejore la velocidad de ejecución. Inicialmente pensé que era muy
sencillo con un UPDATE pero me he vuelto un ocho y no he podido, por eso
recurro a ustedes.

Definicion de la Tabla:


create table #Test ( IdReg int , Sa int Null , Incremento int , Sf int
Null )

insert into #test values ( 1 , 10 , 1 , null )
insert into #test values ( 2 , null, 5 , null )
insert into #test values ( 3 , null, 2 , null )
insert into #test values ( 4 , null, 1 , null )

Donde:

IdReg : Llave primaria, establece el orden de los registros.

Sa: Valor Acumulado anterior o saldo anterior. Para el primer registro es un
valor conocido, para los siguientes registros es igual al valor del Sf del
registro anterior. Por ejemplo, para el registro número 2 el valor de Sa es
igual al valor de Sf del registro nímero 1.

Incremento : un valor de incremento que ya esta en la tabla

Sf: valor acumulado final, saldo final --> Sf = Sa + Incremento

Contenido de la tabla original

Sa Incremento Sf
10 1 ?
? 5 ?
? 2 ?
? 1 ?

lo que debe hacer el update es calcular el saldo final (Sf) sumando Sa +
Incremento, teneiendo en cuenta que Sa es igual a Sf del registro anterior


Sa Incremento Sf

10 1 11
11 5 16
16 2 18
18 1 19





mil gracias


Eusebio
 

Leer las respuestas

#1 ulises
27/04/2004 - 17:35 | Informe spam
Podría servirte algo como :

declare @ini int
select @ini = sa from #test where idreg = 1
update #test set @ini = sf = @ini + incremento
update #test set sa = sf - incremento
select * from #test

idreg sa incremento sf
1 10 1 11
2 11 5 16
3 16 2 18
4 18 1 19

(4 row(s) affected)

el inconveniente que tiene es que tendrías que modificar
el idreg para que sea clustered y te pueda garantizar un
orden en la actualización.

create table #Test ( idreg int primary key clustered, ...

Saludos,
Ulises

Mostrar la cita
usando un cursor, lo
Mostrar la cita
la manera más
Mostrar la cita
una manera de hacerlo
Mostrar la cita
que era muy
Mostrar la cita
podido, por eso
Mostrar la cita
Incremento int , Sf int
Mostrar la cita
registros.
Mostrar la cita
primer registro es un
Mostrar la cita
valor del Sf del
Mostrar la cita
el valor de Sa es
Mostrar la cita
tabla
Mostrar la cita
Incremento
Mostrar la cita
(Sf) sumando Sa +
Mostrar la cita
registro anterior
Mostrar la cita

Preguntas similares