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

Preguntas similare

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:
Mostrar la cita
#2 Cesar Ochica
16/03/2006 - 16:44 | Informe spam
Hola Maxi,

Como te habras dado cuenta el cursor lo que hace es ir columna por columna
(las modificadas) y la idea es que donde coloque :@AquiValorAnt se saque el
valor que contiene la tabla deleted de la columna en la que este el cursor y
en :@AquiValorNew el valor de la correspondiente columna en la tabla
inserted.

Gracias, espero me puedan ayudar con esto, ya que lo necesito para un
proceso urgente.
#3 Maxi [MVP]
17/03/2006 - 00:51 | Informe spam
Hola, para hacer eso dentro del bucle vas a tener que usar SQL dinamico y
armar la consulta (sp_executesql), no es nada lindo pero si quieres tener
una tabla tan generica no te quedara otra :(


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

MSN:

"Cesar Ochica" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida