Hola Rodrigo Rodriguez G:
No te sería mucho más fácil, y mejor en rendimiento, recomendable en buenas prácticas, más fácil de saber si ocurre un error, y todas las infinitas cualidades que tiene hacer las cosas donde tienes control, que no donde no lo tienes, por ejemplo al realizar
la insercción de tu log directamente desde un procedimiento almacenado, donde grabas la inserción de Examen.
Te voy a exponer los dos escenarios. Como no pones nada de como es Examen. Me lo voy a imaginar.
CREATE TABLE examen
(id INT IDENTITY(1, 1) PRIMARY KEY,
idAlumno INT,
idmateria INT,
nombreExamen VARCHAR(50),
nota FLOAT,
fechaInserccion DATETIME,
fechaRealizacion DATETIME
);
GO
CREATE TABLE miLog
(id INT IDENTITY(1, 1),
accion VARCHAR(1000),
fecha DATETIME,
idUsuario INT
);
GO
CREATE PROCEDURE spInsert
(@idAlumno INT,
@idMateria INT,
@nombreExamen VARCHAR(50),
@nota FLOAT,
@fechaRealizacion DATETIME
)
AS
BEGIN TRAN;
DECLARE @fecha DATETIME= GETDATE();
INSERT INTO examen
(idAlumno,
idmateria,
nombreExamen,
nota,
fechaInserccion,
fechaRealizacion
)
VALUES
(@idAlumno,
@idMateria,
@nombreExamen,
@nota,
@fecha,
@fechaRealizacion
);
INSERT INTO miLog
(accion,
fecha,
idUsuario
)
VALUES
('Examen fue agregado',
@fecha,
@idAlumno
);
IF(@@ERROR = 0)
COMMIT TRAN;
ELSE
ROLLBACK TRAN;
RETURN;
GO
/* ejemplo con procedimiento */
EXEC spInsert
@idAlumno = 1,
@idMateria = 1,
@nombreExamen = 'matemáticas',
@nota = 5.6,
@fechaRealizacion = '20180928';
GO
SELECT *
FROM examen;
SELECT *
FROM miLog;
GO
Este sería el modo normal.
Modo trigger.
CREATE TRIGGER tr_insertaLogExamen ON dbo.examen
AFTER INSERT
AS
INSERT INTO miLog
(accion,
fecha,
idUsuario
)
SELECT 'Examen fue agregado',
i.fechaInserccion,
i.idAlumno
FROM inserted i;
RETURN;
GO
/* ejemplo con trigger para varios registros simultaneos */
INSERT INTO examen
(idAlumno,
idmateria,
nombreExamen,
nota,
fechaInserccion,
fechaRealizacion
)
VALUES
(2,
2,
'lengua',
4.6,
'20180923 16:04',
'20180924 09:04'
),
(3,
2,
'lengua',
7.6,
'20180923 16:04',
'20180924 09:04'
),
(4,
2,
'lengua',
4.0,
'20180923 16:04',
'20180924 09:04'
);
GO
SELECT *
FROM examen;
SELECT *
FROM miLog;
GO
Espero te ayude.