Hola, estoy trabajando en SQL SERVER 2000, e intentando almacenar en varias
tablas (1 por columna), el historico de actualizaciones por cada columna de
la tabla "madre".
El problema: el trigger se lanza n veces, tantas como columnas se
actualizan, luego en las tablas historicas se almacena n veces ese cambio.
Debido a que utilizando la funcion COLUMNS_UPDATED(), mapeo las columnas
actualizadas y lanzo el registro para cada una.
¿Como debería hacerlo para que sólo se almacenara 1 vez, o para que el
trigger solo se lanzara 1 única vez?
Muchas gracias, aquí os adjunto el codigo:
************************************************************
/*
- El MAPA de columnas es:
c1 0000 0001 = 1
c2 0000 0010 = 2
c3 0000 0100 = 4
c4 0000 1000 = 8
c5 0001 0000 = 16
c6 0010 0000 = 32
*/
CREATE TRIGGER trig_GuardaHistoricoModifs
ON MyTable
FOR UPDATE
AS
declare @fila smallint
declare @fecha datetime
declare @columnas integer
SET @fecha = getdate() /* Establecer la fecha para que sea
la misma en todas las inserciones,
y no varíe ni en los segundos */
/* Convertir COLUMNS_UPDATED() que es varbinary en integer para las
comparaciones */
SET @columnas = convert( integer, COLUMNS_UPDATED() )
/* Modificacion de la 1ª columna */
IF ( ( @columnas & convert(integer, 0x01) ) = 1 )
BEGIN
INSERT INTO HistModifMyTable_C1
SELECT @fecha as Fecha, I.usuario, D.dato1, D.dato2, I.dato3
FROM inserted I, deleted D
END
/* Modificacion de la 2ª columna */
IF ( ( @columnas & convert(integer, 0x02) ) = 2 )
BEGIN
INSERT INTO HistModifMyTable_C2
SELECT @fecha as Fecha, I.usuario, D.dato1, D.dato2, I.dato3
FROM inserted I, deleted D
END
/* Modificacion de la 3ª columna */
IF ( ( @columnas & convert(integer, 0x04) ) = 4 )
BEGIN
INSERT INTO HistModifMyTable_C3
SELECT @fecha as Fecha, I.usuario, D.dato1, D.dato2, I.dato3
FROM inserted I, deleted D
END
GO
************************************************************
Leer las respuestas