Hola a todos
Estoy tratando de implementar un sistemas de auditoria en algunas tablas de
mi base de datos y para tal fin pense en los triggers, y todo iba bien hasta
que llege a este punto:
En mi tabla de auditoria tengo los campos:
ID, TablaEditada, IDFilaEditada, ColumnaEditada, ValAnterior, ValNuevo
me gustaria por ejemplo que al modificar las columnas Año y Edad de un
determinado registro de la tabla clientes en la tabla auditoria se inserten
los siguientes registros:
el sql seria: update clientes set año56, edadq where ID5
ID,TablaEdit,IDFilaEdit,ColumnaEdit,ValAnt, ValNew
1 Clientes 175 Año 1950 1956
2 Clientes 175 Edad 76 71
Agradezco su ayuda.
PDSTA: esto es lo que tengo y funciona bien a excepcion de que no trae el
valor anterior ni el valor nuevo, el resto si lo trae.
CREATE TRIGGER AUD_ciudades ON ciudades
FOR UPDATE
AS
DECLARE @Estado as char(1)
DECLARE @Columnas VARCHAR(1000)
set @Estado='U'
DECLARE cursor_cols CURSOR
FOR
SELECT Column_Name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='ciudades'
AND POWER(2,ORDINAL_POSITION-1)&COLUMNS_UPDATED()> 0;
OPEN cursor_cols
DECLARE @Col varchar(15)
FETCH NEXT FROM cursor_cols INTO @Col
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
BEGIN
insert into MaeAudita
select (select COALESCE(MAX(MA_ID),0)+1 from MaeAudita), @Estado ,
getdate(), 'ciudades', (select d.ciu_id from ciudades m inner join deleted d
on d.ciu_id=m.ciu_id), @col, @AquiValorAnt , @AquiValorNew, SYSTEM_USER,
host_name()
FETCH NEXT FROM cursor_cols INTO @Col
END
END
CLOSE cursor_cols
DEALLOCATE cursor_cols
Leer las respuestas