Columna "Saldo", usar o no usar ?

07/02/2004 - 16:15 por LS- Sistemas | Informe spam
En una tabla con las columnas: fecha,debe,haber es conveniente que exista la
columna saldo ?
En caso afirmativo, como seria el insert para que se mantenga actualizado el
saldo ?, teniendo en cuenta que el orden es por fecha, pudiendo esta ser
anterior al ultimo movimiento, es decir que habria que recalcular los saldos
desde el insert hacia abajo.
Yo lo hice en un SP utilizando cursores, pero se puede hacer con un update,
select, etc.?


Leandro Sponton
Goya - Argentina

Preguntas similare

Leer las respuestas

#6 LS- Sistemas
08/02/2004 - 00:20 | Informe spam
A que se debe lo de no usar cursores ?


Gracias

Leandro Sponton
Goya - Argentina
Respuesta Responder a este mensaje
#7 Maximiliano d. Accotto
08/02/2004 - 01:07 | Informe spam
Son muy lentos para el motor de Base de Datos.

SqlServer esta pensado para trabajar con conjunto de datos y no fila a fila,
por lo tanto esta tecnica hara lento el proceso.

Si quieres hacer una prueba piola para ver que es lo que pasa hacete esto.

Generate una tabla con 1.000 registros Cualquiera

luego hace un cursor y anda borrando fila a fila cada registro

Toma el tiempo que tarda.

Luego carga los mismos 1.000 registros y usa Delete From tabla y verifica
cuanto tarda tambien ;-)

Esta es una forma vulgar (no me reten) de que veas porque el uso de Cursores
no es lo optimo para el motor.

Salu2

Maxi


"LS- Sistemas" escribió en el mensaje
news:%23ve$
A que se debe lo de no usar cursores ?


Gracias

Leandro Sponton
Goya - Argentina


Respuesta Responder a este mensaje
#8 LS- Sistemas
08/02/2004 - 14:27 | Informe spam
Es solo un problema de velocidad ?


Leandro Sponton
Goya - Argentina
Respuesta Responder a este mensaje
#9 Maximiliano d. Accotto
08/02/2004 - 19:43 | Informe spam
Como dice nuestro amigo Adrian, es un problema de todo el Servidor, lo cual
hara que todo se ponga pesado y si un DBA descubre que es tu aplicacion la
que le saca performance a su Servidor, te puedes imaginar lo que puede pasar
no?

Hay veces que la velocidad en las cosas no se tiene mucho encuenta, pero es
un factor tan importante como resolver el problema en si, o sea no vale solo
con resolver una consulta via Sql sino que tambien debe ser optima porque
luego sino se genera algo llamado "Desgaste del usuario" y si ello pasa tu
aplicacion muy probablemente sea reemplazada y no solo ello sino que muy
malas recomandaciones quizas.

Yo siempre recomiendo a los Arquitectos y Desarrolladores que deben tener
muy encuenta este factor tanto o mas que resolver el problema en si, ya que
conozco varios sistemas que han fracasado por ello solo, el sistema en si
era maravilloso pero en Performance un desastre por lo cual se generaba eso
que te dije antes "Desgaste del usuario" y ni hablar si ello pasa la barrera
y lo sienten tambien los Dba, Gerentes de IT o lideres.

Lamentablemente no vivimos en un mundo ideal, donde solo debamos
preocuparnos por resolver la consulta, sino que hay otras variables y
factores que se deben considerar si queremos que nuestro sistema no sea un
fracaso total.

Salu2

Maxi


"LS- Sistemas" escribió en el mensaje
news:O%
Es solo un problema de velocidad ?


Leandro Sponton
Goya - Argentina


Respuesta Responder a este mensaje
#10 Miguel Egea
08/02/2004 - 20:58 | Informe spam
si no le quitaste el antispam no lo recibiré.
Recalcular sobre menos elementos es naturalmente más optimo, tendrias que
cambiar un poco el algoritmo, en cualquier caso siempre será una operación
potencialmente costosa. Quizá creando lo que te mando como vista indexada
sea absolutamente optimo, aunque habría que comprobar para tu caso
particular que tal se comportan las inserciones.

Saludos
Miguel Egea

"LS- Sistemas" escribió en el mensaje
news:
Si no entiendo mal el ejemplo funciona para dFecha que no se cruce con
nCodigoInterno, es decir que a mayor dFecha corresponde mayor
nCodigoInterno.
Es asi ?

En mi caso se puede dar que al ordenar por dFecha , la primer fila puede
tener nCodigoInterno = 1000 y la fila Nro. 50 puede tener nCodigoInterno 2
y lo que pretendo hacer es recalcular el saldo solo desde la fila


insertada
hacia "abajo" en el ordenamiento, para no hacerlo sobre toda la cuenta,
aplicando la formula:

SaldoFilaActual = SaldoFilaAnterior + DebeFilaActual - HaberFilaActual

Gracias

Leandro Sponton
Goya - Argentina

PD: Disculpa Miguel, Salio uno a tu correo privado por error




From: "Miguel Egea"
Newsgroups: microsoft.public.es.sqlserver
Sent: Saturday, February 07, 2004 1:04 PM
Subject: Re: Columna "Saldo", usar o no usar ?


> Bueno, yo he preparado un ejemplo, de como se hace con código t-sql, no


es
> nada optimo, más bien al contrario, pero sirver como ilustración
>
> En cualquier caso yo este tipo de cosas suelo hacerlas en el cliente,
tienes
> que hacer alguna cosita más pero se puede programar mucho más optimo.
>
> CREATE TABLE [Diario] (
> [nCodigoInterno] [int] IDENTITY (1, 1) NOT NULL ,
> [sEjercicio] [varchar] (4) COLLATE SQL_Latin1_General_CP1_CI_AS NOT


NULL
,
> [sCuenta] [varchar] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL


,
> [dFecha] [datetime] NOT NULL ,
> [nTipoAsiento] [varchar] (4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL


,
> [nAsiento] [int] NOT NULL ,
> [nApunte] [int] NOT NULL ,
> [sConcepto] [varchar] (4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
> [sTexto] [varchar] (80) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
> [nDebe] [money] NOT NULL ,
> [nHaber] [money] NOT NULL ,
> [dDocumento] [datetime] NULL ,
> [sDocumento] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
> [bPunteado] [bit] NULL ,
> [bConciliado] [int] NULL ,
> [sProyecto] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
> [sDepartamento] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS


NULL
,
> [nIva] [int] NULL ,
> [sContrapartida] [varchar] (15) COLLATE SQL_Latin1_General_CP1_CI_AS


NULL
,
> [nCuota] [money] NULL ,
> [nBase] [money] NULL ,
> [nPctj] [float] NULL ,
> [nTrabajo] [numeric](2, 0) NOT NULL CONSTRAINT
> [DF__diario__nTrabajo__793DFFAF] DEFAULT (0),
> [sTipoIva] [varchar] (8) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
> [nPctjRe] [float] NULL ,
> [nCuotaRE] [float] NULL ,
> [nImporteTotal] [float] NULL ,
> CONSTRAINT [pk_diario] PRIMARY KEY CLUSTERED
> (
> [nCodigoInterno]
> ) ON [PRIMARY]
> ) ON [PRIMARY]
> GO
>
>
> set statistics io on
> go
> select scuenta,dfecha,stexto,ndebe,nhaber,
> (select sum(ndebe-nhaber) from Diario d2
> where d.scuentaÒ.scuenta and d.dfecha>Ò.dfecha
> and d.ncodigointerno>d2.ncodigointerno) Saldo
> From dbo.Diario d
> order by scuenta,dfecha
> go
> create index ix_ayuda_Saldos on Diario (scuenta,dfecha)
>
>
> Saludos
> Miguel Egea
>
> "LS- Sistemas" escribió en el mensaje
> news:
> > En una tabla con las columnas: fecha,debe,haber es conveniente que
exista
> la
> > columna saldo ?
> > En caso afirmativo, como seria el insert para que se mantenga
actualizado
> el
> > saldo ?, teniendo en cuenta que el orden es por fecha, pudiendo esta


ser
> > anterior al ultimo movimiento, es decir que habria que recalcular los
> saldos
> > desde el insert hacia abajo.
> > Yo lo hice en un SP utilizando cursores, pero se puede hacer con un
> update,
> > select, etc.?
> >
> >
> > Leandro Sponton
> > Goya - Argentina
> >
> >
> >
> >
>
>




Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida