Ayuda con Trigger

16/03/2006 - 00:42 por Cesar Ochica | Informe spam
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

#1 Maxi [MVP]
16/03/2006 - 01:33 | Informe spam
Hola, y de donde sale:@AquiValorAnt , @AquiValorNew




Salu2
-
[MVP] SQL Server
Orador para Culminis Latam
www.sqlgurus.org

MSN:

"Cesar Ochica" escribió en el mensaje
news:
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





Preguntas similares