none
Existe algún método para insertar un IdUsuario utilizando TRIGGUER? RRS feed

Respuestas

  • 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.

    viernes, 28 de septiembre de 2018 5:56