Prueba de Trigger
Jarod Cervantes Gutiérrez 2:00 - 3:00, 3:40 - 6:00 (3 horas y 20 min)
Se empezó tratando de probar un trigger que cree un estado de cuenta cada que se crea una cuenta.
Para eso se borraron tablas para empezar pruebas.
Se borro la tabla que carga los XML, así que se cargó de nuevo. Se tardo un poco pues el XML que se cargó de nuevo no era el correcto.
Además se cambio el orden en que se cargan los catálogos, se coloco tipo moneda antes de tipo cuenta, porque generaba un error, TipoCuentaAhorro tiene FK de TipoMoneda.
Se decidió no continuar con el trigger e ir probando como se iban haciendo la carga de datos, pues habían errores.
Se continuo con el SP de la simulación para cargar otros datos, ya había una parte que cargaba las persona y las cuentas, se agregaron el beneficiario. No insertaba la cantidad correcta de entidades. Se estuvo buscando los errores. Al final fue porque se cargo el XML incorrecto, tenia Telefeno y telefono, esa diferencia en la primer letra generaba el error por un null pues la columna Telefono en Persona no acepta null.
Se prosiguió con el SP de simulación en la parte de crear las Movimiento, al final no se utiliza pues genera errores por un mapeo incorrecto de las FK.
Luego se intento de nuevo con el Trigger, se usaron de fuente:
https://codingsight.com/sql-server-triggers-understanding-alternatives/#:~:text=SQL%20Server%20DML%20Triggers%20are,database%20tables'%20content%20or%20views.
Al principio el Trigger que se debía activar al crear una CuentaAhorro no se activa, se desconoce porque. Despues se creo otro Trigger siguiendo la documentación de Microsoft:
https://docs.microsoft.com/en-us/sql/relational-databases/triggers/create-dml-triggers?view=sql-server-ver15
Y ya el trigger se activaba al crear la cuenta.
Se probó en el SP de simulación, este por los datos del XML crea 10 cuentas, por lo tanto el trigger se debería activar 10 veces y crear 10 Estados de Cuenta, pero al final crea solo 4.
Se cree que el Trigger se activa una vez por cada nodo de FechaOperacionen el XML, puesto que son 4 nodos de fecha. Y siempre el Estado de Cuenta que crea el Trigger es el que correponde a la ultima Cuenta Ahorro de cada nodo de FechaOperacion.
El codigo del Trigger es el siguiente:
/****** Object: Trigger [dbo].[Trigger_Test] Script Date: 27/11/2020 18:34:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Trigger_Test]
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 @IdCuentaAhorro INT,
@FechaInicial DATE,
@FechaFin DATE
SELECT TOP 1 @IdCuentaAhorro = inserted.ID,
@FechaInicial = inserted.FechaCreacion
FROM inserted
SET @FechaFin = DATEADD (month, 1, @FechaInicial)
SET @FechaFin = DATEADD (day, -1, @FechaFin)
INSERT INTO EstadoCuenta
VALUES (
@IdCuentaAhorro,
@FechaInicial,
@FechaFin,
0,
0
)
END
Comentarios
Publicar un comentario