Ver Mensaje Individual
  #40 (permalink)  
Antiguo 20/05/2003, 09:54
Avatar de fenix4
fenix4
 
Fecha de Ingreso: noviembre-2001
Ubicación: Caracas
Mensajes: 226
Antigüedad: 23 años, 1 mes
Puntos: 1
SQL 2000

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
__________________
S.L.P.S.