Estoy escribiendo un disparador para realizar un seguimiento de todos los cambios que ocurren en una tabla. Lamentablemente, la tabla tiene más de 150 columnas y quería evitar escribir cada columna en el código (por ejemplo, new.col1, new.col2 ....) y así escribí una consulta siguiente en "después de activar la actualización"mysql Desencadenante para iniciar sesión, busque las columnas modificadas
INSERT INTO logs SELECT *, NOW() FROM abc WHERE abc.id = NEW.Id;
Esta idea está causando un problema múltiple debido a la duplicación de datos que no se cambia en la consulta de actualización.
En pocas palabras, quiero saber dinámicamente qué columnas formaban parte de la consulta de actualización y si eso no es posible, hay una manera de recorrer todas las columnas de la fila "nueva" para poder comparar dinámicamente las antiguas @. colName == new. @ colName?
Ya he visto Oracle PL/SQL: Loop Over Trigger Columns Dynamically, How to determine if anything changed in update trigger in t-sql y MySQL UPDATE trigger: INSERTing the values of the columns that actually changed.
El último enlace es el que cierra con lo que necesito con solo una diferencia, no quiero codificar los nombres de las columnas en la siguiente declaración porque tengo más de 100 columnas en todas las tablas que voy a escribir similar desencadenar !!
IF NEW.column1 <> OLD.column1 THEN INSERT INTO... END IF; IF NEW.column2 <> OLD.column2 THEN INSERT INTO... END IF
He estado enfrenta ahora a un nuevo tipo de problema ... Incluso si estoy listo para codificar todos mis 150 columnas en mis disparadores, estoy teniendo ¡es un mal momento para mantener un registro de la columna "UpdatedBy"! Mi tabla original realiza un seguimiento de las personas que iniciaron sesión en la aplicación y que hizo el último cambio a través de la aplicación. Lamentablemente, nuestra tecnología de soporte técnico puede cambiar datos directamente desde la base de datos sin actualizar la columna "updatedBy" y en ese caso no hay manera de saber si "updatedBy" fue parte de la consulta o no y por lo tanto no puedo configurar esa columna ¡anular cuando sea necesario! Espero que tuviera sentido aquí :) – Sap
Tiene sentido. Sin embargo, no puedo hacer nada al respecto. Esto es para lo que son las API y las "Interfaces". Para obligar a la gente de "apoyo"/otros desarrolladores a hacer lo que se supone que deben hacer. – Jegsar