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

#1 Maximiliano Damian Accotto
07/02/2004 - 16:23 | Informe spam
Hola, lo que yo uso en este caso es una Vista, donde hago el calculo y no ir
actualizando un campo con el Saldo asi me ahorro los Triggers ;-).

Igual lo podrias hacer como decis vos. claro no utilizaria cursores ni a
palos, lo que podrias hacer es mandarnos las Estructuras de las tablas y
como has encarado el Sp y lo vemos en conjunto.


Salu2 enormes

Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...efault.asp
-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
"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
#2 Gustavo Larriera [MVP]
07/02/2004 - 16:46 | Informe spam
Si el saldo es un cálculo entre debe y haber de cada registro, puedes usar
una columna calculada.

CREATE TABLE miTabla
(
col1 int,
col2 int,
colcalculada AS (col1 - col2)
)

Cuando haces el INSERT no debes proporcionar valor alguno a la columna
calculada.

Si deseas hacer una operacion de cálculo que "barra" todos los debes y
haberes para obtener un saldo total, puedes utilizar un stored procedure o
una function. Si deseas mantenerlo actualizado al isntante, puedes utilizar
un trigger que se dispara ante un cambio de datos en la tabla.

Depende de lo que quieras realmente hacer.

Gustavo Larriera, MVP-SQL, MCSE
Uruguay LatAm

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no
otorga ningún derecho.


"LS- Sistemas" wrote in message
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
#3 Jose Mariano Alvarez \(MUG\)
07/02/2004 - 16:53 | Informe spam
Creo que conveniente usar una columna saldo si lo consultas mucho y lo
actualizas no tanto.
Te sugiero evites el tema de cuirsores de ser posible.
Igualmente hay otras posibilidades

Aqui tienes un articulo de Adrián García que seguramente te va a servir.
Mejorando el rendimiento de una base de datos a través de la
desnormalización y la utilización adecuada de índices.
http://www.microsoft.com/spanish/ms...art144.asp


Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar



"LS- Sistemas" wrote in message
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
#4 Miguel Egea
07/02/2004 - 17:04 | Informe spam
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
#5 LS- Sistemas
08/02/2004 - 00:19 | Informe spam
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 Respuesta Tengo una respuesta
Search Busqueda sugerida