Pregunta: Se puede agregar un registro a una tabla, dependiendo del ultimo valor actualizado en un campo de otra tabla
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