Donde esta el error ?

08/04/2005 - 17:08 por Marcelo | Informe spam
Hola !

Tengo un store procedure y una funcion en SQL Server, que
intento llevar el importe acumulado en cada linea.

Estos son

CREATE PROCEDURE [TBancosCuentasResumen]
(@IdCuenta [int])


AS

declare @Acumula money
Set @Acumula = 0
SELECT FechaSaldo,Importe, dbo.AcumuloSaldo(Operacion,
Importe, @Acumula) as Saldo
FROM TBancosCuentasDetalle
where IdCuenta = @IdCuenta
order by FechaSaldo


El Procedimiento recibe el IdCuenta y me muestra todos
los movimientos de esa cuenta, pero para mi sorpresa, no
me lleva el total acumulado. No encuentro el error.

La funcion AcumuloSaldo, seria la que me esta calculando
el total acumulado.






CREATE function AcumuloSaldo (
@Operador int,
@Importe money,
@Acumula money )
returns money

as

begin


Select @Acumula
Case @Operador
when 0 then @Acumula + @Importe
when 1 then @Acumula - @Importe
end

return @Acumula
end

Bueno, el que me pueda ayudar, desde ya le voy a estar
muy agradecido.

saludos a todos los foro



marcelo

Preguntas similare

Leer las respuestas

#1 Don Roque
08/04/2005 - 17:39 | Informe spam
adjunta el script para crear las tablas y para insertar datos de
prueba. Ademas de esto, pone el resultado que esperas obtener. Asi te
podemos dar una mano
Respuesta Responder a este mensaje
#2 Alejandro Mesa
08/04/2005 - 18:07 | Informe spam
Marcelo,

Una funcion de usuario en t-sql no es igual que una funcion, por ejemplo, en
visual basic, donde puedes pasar parametros por valor o por referencia (al
parecer tratas de simular este ultimo). Una vez recivido el valor del
parametro, este es considerado como una variable interna a la funcion, asi
que cualquier cambie sobre esta no se vera reflejado fuera de la funcion.

Ejemplo:

use northwind
go

create function dbo.ufn_f1 (
@i int
)
returns int
as
begin

set @i = @i * 2

return @i
end
go

declare @j int

set @j = 2

select dbo.ufn_f1(@j)
select @j
go

drop function dbo.ufn_f1
go

Una solucion seria usar el valor de retorno de la funcion para incrementar
la variable, pero t-sql no deja mezclar en un mismo select la asignacion y
seleccion.

Ejemplo:

use northwind
go

declare @i int

set @i = 2

select @i = @i + 2, orderid
from dbo.orders
go

Resultado:

Server: Msg 141, Level 15, State 1, Line 7
A SELECT statement that assigns a value to a variable must not be combined
with data-retrieval operations.

Otra solucion seria hacer el calculo del importe acumulado en la misma
sentencia select. Algo asi como:

select
FechaSaldo,
Importe,
(
select
sum(
case Operacion
when 0 then Importe
when 1 then (-1.00 * Importe)
else 0
end)
from
TBancosCuentasDetalle as b
where
b.IdCuenta = a.IdCuenta
and b.FechaSaldo <= a.FechaSaldo
) as Saldo
from
TBancosCuentasDetalle as a
where
IdCuenta = @IdCuenta
order by
FechaSaldo

Use la columna [FechaSaldo] suponiendo que una misma cuenta no tiene mas de
una transaccion en la misma fecha - hora - minuto - segundo - milisegundo, de
locontrarios debes adaptar el select a tus necesidades.


AMB


"Marcelo" wrote:

Hola !

Tengo un store procedure y una funcion en SQL Server, que
intento llevar el importe acumulado en cada linea.

Estos son

CREATE PROCEDURE [TBancosCuentasResumen]
(@IdCuenta [int])


AS

declare @Acumula money
Set @Acumula = 0
SELECT FechaSaldo,Importe, dbo.AcumuloSaldo(Operacion,
Importe, @Acumula) as Saldo
FROM TBancosCuentasDetalle
where IdCuenta = @IdCuenta
order by FechaSaldo


El Procedimiento recibe el IdCuenta y me muestra todos
los movimientos de esa cuenta, pero para mi sorpresa, no
me lleva el total acumulado. No encuentro el error.

La funcion AcumuloSaldo, seria la que me esta calculando
el total acumulado.






CREATE function AcumuloSaldo (
@Operador int,
@Importe money,
@Acumula money )
returns money

as

begin


Select @Acumula >
Case @Operador
when 0 then @Acumula + @Importe
when 1 then @Acumula - @Importe
end

return @Acumula
end

Bueno, el que me pueda ayudar, desde ya le voy a estar
muy agradecido.

saludos a todos los foro



marcelo




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida