Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/05/2003, 09:25
Avatar de fenix4
fenix4
 
Fecha de Ingreso: noviembre-2001
Ubicación: Caracas
Mensajes: 226
Antigüedad: 22 años, 6 meses
Puntos: 1
hola y gracias
asqui les mando en codigo que hice pero tengo un detalle
Código:
CREATE TRIGGER export_dir2 ON [dbo].[prog_acreditados_tmp] 
INSTEAD OF  UPDATE 
AS
declare @situacion int
declare @situacion_ins int
declare @nro_exp int
declare @nro_exp_ins int
select @situacion_ins = situacion, @nro_exp_ins = nro_exp from inserted
select @situacion = situacion, @nro_exp = nro_exp from dbo.prog_acreditados_tmp where nro_exp = @nro_exp_ins
begin
if (@situacion_ins <> @situacion)
	begin		
	if ((@situacion_ins = 17) or (@situacion_ins = 168) )
		begin
		if (select id from dbo.directorio_tmp where nro_exp = @nro_exp and tipo_exp = 90) is null
		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    
--		raiserror('Situacion de dir_tmp %d de exp %d y situacion de inseted %d de exp %d',16,1,@situacion,@nro_exp,@situacion_ins,@nro_exp_ins) 
		end
		end
	end
commit
end
este codigo funciona perfectamente, cuando hago un cambio en la tabla, especificamente en un campo lo compara con el valor que tenia anteriormente, el cual esta guardado temporalmente en la tabla inserted, si ese valor no esta en la tabla donde lo voy a introducir lo inserta alli.

El problema que tengo es que ahora en la tabla donde esta el trigger no guarda las modificaciones que le hago sea el campo que sea :( esto se debe al que estoy usando el INSTEAD OF en vez de AFTER, pero es que no se me ocurre de otra forma.

Gracias a todos

bingo !!! cambie la estrategia!!!

consegui una funcion que me dice si se realizo una modificacion al campo y luego lo comparo con el valor que necesito!!!
asi que lo hice con AFTER aqui les dejo el codigo y tambien el FAQ
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.

Última edición por fenix4; 20/05/2003 a las 09:25