20/05/2003, 09:25
|
| | | Fecha de Ingreso: noviembre-2001 Ubicación: Caracas
Mensajes: 226
Antigüedad: 23 años 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 |