sábado, 12 de octubre de 2019

Insertar un movimiento e inicio de Trigger

Este dia realice un stored procedure  para insertar un movimiento, este SP se encargaria de hacer los cambios correspondientes en la determinada cuenta y estado de cuenta que correspondiera al movimiento y ademas insertaria el movimiento en la tabla de Movimiento, este SP no fue del todo complejo es decir no utilice joins sino que todo lo hice utilizando variables donde trabajabo los datos para hacerle update al campo correspondiente de las tablas de EstadoCuenta y Cliente, acontinuacion el codigo del SP:


CREATE PROCEDURE [dbo].[CASP_InsertarMovimiento]
       -- Add the parameters for the stored procedure here
       @Numero_Cuenta nvarchar(50),
       @TipoMovimiento nvarchar(100),
       @Fecha date,
       @Monto money,
       @Descripcion nvarchar(200)
      
AS
BEGIN
       -- SET NOCOUNT ON added to prevent extra result sets from
       -- interfering with SELECT statements.
       SET NOCOUNT ON;

    -- Insert statements for procedure here
       BEGIN TRY
      
             -- Se verifica que los parametros no vengan nulos

             IF @Numero_Cuenta = NULL
             BEGIN
                    return -100001
             END

             IF @TipoMovimiento = NULL
             BEGIN
                    return -100002
             END

             IF @Fecha = NULL
             BEGIN
                    return -100003
             END

             IF @Monto = NULL
             BEGIN
                    return -100004
             END

             IF @Descripcion = NULL
             BEGIN
                    return -100005
             END

             --Inicio de cambios en tablas correspondientes
             declare @tipo nvarchar(1);
             set @tipo = (select TM.TipoDC from TipoMovimiento TM where TM.Nombre = @TipoMovimiento)

             IF (@tipo = 'C')
                    BEGIN
                           Update CuentaAhorro set Saldo = Saldo + @Monto
                           Where Numero_Cuenta = @Numero_Cuenta
                    END
             ELSE
                    BEGIN
                           if((select CA.Saldo from CuentaAhorro CA where CA.Numero_Cuenta = @Numero_Cuenta)
                                  < @Monto)
                                  BEGIN
                                        Update CuentaAhorro set Saldo = 0
                                        Where Numero_Cuenta = @Numero_Cuenta
                                  END
                           ELSE
                                  BEGIN
                                        Update CuentaAhorro set Saldo = Saldo - @Monto
                                        Where Numero_Cuenta = @Numero_Cuenta
                                  END
                    END
            
            
             --Actualizacion del estadoCuenta
             declare @nuevoSaldo money = (Select CA.Saldo from CuentaAhorro CA
                                                             where CA.Numero_Cuenta = @Numero_Cuenta)
             Update EstadoCuenta set Saldo_Final = @nuevoSaldo
             Where Numero_Cuenta = @Numero_Cuenta and Fecha_Inicio < @fecha and Fecha_Final > @Fecha


             --Insercion del nuevo movimiento
             INSERT dbo.Movimiento
             SELECT CA.id, TM.id, @Numero_Cuenta, @TipoMovimiento,
                           @Fecha, @Monto, @Descripcion
             FROM CuentaAhorro CA, TipoMovimiento TM
             WHERE TM.Nombre = @TipoMovimiento
             AND CA.Numero_Cuenta = @Numero_Cuenta
            
       END TRY

       BEGIN CATCH
             return @@ERROR * -1
       END CATCH
END

Ademas este dia inicie muy muy muy poco del trigger dado que me puse a trabajar con cosas de otros cursos, acontinuacion el poco codigo que realice del trigger:


ALTER TRIGGER  [dbo].[Estados] ON [dbo].[CuentaAhorro]
   AFTER INSERT
AS
BEGIN
       -- SET NOCOUNT ON added to prevent extra result sets from
       -- interfering with SELECT statements.
       SET NOCOUNT ON;

       declare @idCuenta int;
       Select @idCuenta = NewCA.id from inserted NewCA;
      

END

Este dia inverti en horas lo siguiente: 1,9 horas

No hay comentarios:

Publicar un comentario