Triggers para Tablas SQL Server 7 o 2000

NOA
11 de Julio del 2002
Hola a todos.
Ya he avanzado un poco al respecto.. pero ahora tengo otro problema bastante mas concreto.
Este es mi Trigger:

CREATE TRIGGER [DISPARADOR1] ON [TablaOrigen]
FOR INSERT, UPDATE, DELETE
AS
INSERT INTO TablaDestino
(CampoDestino1,CampoDestino2,CampoDestino3)
VALUES (CampoOrigen1, CampoOrigen2, fechaSys)

Ahora el problema es:
1.- No consigo que el valor de CampoOrigen1 sea correcto. He probado "TablaOrigen.CampoOrigen", "[TablaOrigen].[CampoOrigen]".... pero parece que no le gusta
2.- Como obtengo la fecha y hora del sys en la sentencia del INSERT??
3.- Si el trigger puede dispararse por UPDATE,INSERT o DELETE, como puedo saber cual es la accion por la que se ha disparado??
Muchas Gracias



JPRomero
11 de Julio del 2002
Que tal, al parecer inicias con los triggers, mira cuando afectas a la BD por Insert, Update o Delete puedes disparar un trigger eso creo que ya lo tienes claro para controlar la accion el trigger presenta

CREATE TRIGGER [DISPARADOR1] ON [TablaOrigen]
FOR INSERT, UPDATE, DELETE
AS

asi que por ejemplo si necesitas controlar el Update tu tigger debe quedar asi:

CREATE TRIGGER [DISPARADOR1] ON [TablaOrigen]
FOR UPDATE
AS

ok, entonces la sentencia FOR dice que evento controlas.

Bien ahora para saber a que registro estan afectando ocupas INSERTED, que es un "tabla" (te lo mesiono asi para que te sea mas familiar)temporal que crea SQL entonces si necesitas un insert a otra tabla cuando se haga un insert ve este ejemplo:

CREATE TRIGGER TgrCaracteristicaINS ON dbo.Caracteristica
FOR UPDATE, INSERT
AS
/*
REGISTRO DE CARACTERISTICAS NUEVAS
*/
if ((SELECT COUNT(*) FROM WEB_Actualizaciones_Caracteristica WHERE cve_carac = (SELECT cve_carac FROM INSERTED))>0)
begin
UPDATE WEB_Actualizaciones_Caracteristica set Accion='U' WHERE cve_carac = (SELECT cve_carac FROM INSERTED)
end
else
INSERT INTO WEB_Actualizaciones_Caracteristica (cve_carac, Accion) SELECT cve_carac, 'I' FROM INSERTED

Para saber la fecha del servidor ocupas GETDATE() y si necesitas hacer un insert mira este ejemplo:

INSERT Tabla1 (IdA, Fecha, Nombre)Values (1, GETDATE(), 'José Pablo')


Sale espero te sirva... BYE