none
Trigger UPDATE RRS feed

  • Pregunta

  • Estimados.

    Tengo el siguiente problema:

    Tengo la necesidad de hacer un trigger para UPDATE y que inserte en una tabla historica losd datos antiguos y los nuevos, el problema es que la idea es que haga el INSERT solo cuando los valores de los campos sean distintos esto lo podria hacer si tuviese una columna ID para saber cual o cuales registros se tocaron, pero lamentablemente no es el caso.

    Ejemplo.

    Create Table A
    (Nombre,direccion)

    INSERT INTO A Values ('Juan','Direccion uno')

    --En el siguiente caso NO debe hacer el INSERT

    UPDATE A SET Direccion = 'Direccion uno'  Where Nombre=Juan

    Si fuese 1 solo registro estaria bien, pero se podrian actualizar mas de 1 registro.

    Saludos.


    DBA SQL Server Santiago/Chile

    viernes, 1 de junio de 2018 23:08

Todas las respuestas

  • Dentro del trigger recibes dos pseudo-tablas que se llaman "inserted" y "deleted". En deleted te llegan los valores antiguos y en inserted los nuevos. Puedes compararlos y grabar solo los que difieran. Nótese que cuando haces update sobre más de un registro, entonces inserted y updated son dos tablas completas. Tendrás que compararlas registro a registro usando el criterio que tengas establecido para diferenciar un registro de otro. Si no existe una clave primaria tendrás que seleccionar una combinación de campos que haga sus funciones.

    sábado, 2 de junio de 2018 16:12