Respuesta: Si. Solo se tiene que revisar en la tabla inserted, que es la tabla del sistema donde se guardan los ultimos insert o update de las tablas (es como una tabla tmp). Esto se hace atravez de un desencadenador o trigger es cual se ejecutara cuando se haga un cambio en la tabla a la cual esta asignada el trigger. Luego de revisar si el campo de la tabla fue moficado con la funcion IF UPDATE (CAMPO ) se compara ese valor que se ha obtenido de la tabla inserted con el valor que se desea comparar. Posteriormente es buena idea revisar la tabla destino a ver si ese valor ya no esta alli. y luego se realiza el inser o update dependiendo del caso.
Ejemplo:
Código:
CREATE TRIGGER export_dir ON [dbo].[prog_acreditados_tmp] AFTER UPDATE AS declare @situacion int declare @nro_exp int select @situacion = situacion, @nro_exp = nro_exp from inserted --revisa en la tabla inserted los valores de los campos begin IF UPDATE (situacion) -- verifica si se modifico el campo situacion begin if ((@situacion = 17) or (@situacion = 168) ) -- verifica si es informe favorable o si es acreditado begin if (select id from dbo.directorio_tmp where nro_exp = @nro_exp and tipo_exp = 90) is null --revisa en la tabla a ver si ya esta el registro begin insert into dbo.directorio_tmp ( nivel, programa, mencion, areaconocimiento, grado, sede, instituto, nro_exp, tipo_exp ) SELECT nivel, LOWER(nombre), LOWER(mencion), area_conocimiento, grado, LOWER(sede), institucion, nro_exp, '90' from dbo.prog_acreditados_tmp where nro_exp = @nro_exp end end end --raiserror('Situacion de dir_tmp %d de exp %d ',16,1,@situacion,@nro_exp) -- para verificar los valores end