trigger misterioso

27/09/2004 - 21:07 por Fadoyo | Informe spam
hola a todos, tengo un trigger que ha de impedir que se borren registros de
una tabla en caso de que exista una relación con otras tablas.

el caso es que no funciona, y la verdad, no sé por qué. espero que alguien
me pueda ayudar. el trigger es el siguiente

donde está el fallo?




CREATE TRIGGER TR_D_T_ACTIVI
ON T_ACTIVI
FOR DELETE

AS

DECLARE
@id_activi_del nvarchar,
@horas_realizadas int,
@horas_planificadas int

select @id_activi_del = deleted.id_activi from deleted

select @horas_realizadas = count(*)
from t_activi, t_tarea, t_tarea_rel, t_tarea_rel_rea
where
id_activi = @id_activi_del and
id_activi_tarea = id_activi and
id_tarea_tarea_rel = id_tarea and
id_tarea_rel_tarea_rel_rea = id_tarea_rel

select @horas_planificadas = count(*)
from t_activi, t_tarea, t_tarea_rel, t_tarea_rel_def
where
id_activi = @id_activi_del and
id_activi_tarea = id_activi and
id_tarea_tarea_rel = id_tarea and
id_tarea_rel_tarea_rel_def = id_tarea_rel

begin
if(@horas_realizadas > 0 )

begin
raiserror('No se pueden eliminar Actividades con registros de horas
realizadas o planificadas asociados', 16, 1)
rollback transaction
end

else if(@horas_planificadas > 0)
begin
raiserror('No se pueden eliminar Actividades con registros de horas
realizadas o planificadas asociados', 16, 1)
rollback transaction
end

end


sé a ciencia cierta, q la primera consulta, hecha fuera del trigger devuelve
3.
no sé si es debido a que no pille bien el identificador de la fila que se
borra.

ayudaaaaaaa!!!

gracias de antemano
 

Leer las respuestas

#1 Manuel Etcheto
27/09/2004 - 20:52 | Informe spam
Hola
Para impedir el delete tiene que ser INSTEAD OF y no FOR delete
en FOR delete la acción ya se realizó...
Suerte
Manuel

Fadoyo escribió en el mensaje de noticias

hola a todos, tengo un trigger que ha de impedir que se borren registros


de
una tabla en caso de que exista una relación con otras tablas.

el caso es que no funciona, y la verdad, no sé por qué. espero que alguien
me pueda ayudar. el trigger es el siguiente

donde está el fallo?




CREATE TRIGGER TR_D_T_ACTIVI
ON T_ACTIVI
FOR DELETE

AS

DECLARE
@id_activi_del nvarchar,
@horas_realizadas int,
@horas_planificadas int

select @id_activi_del = deleted.id_activi from deleted

select @horas_realizadas = count(*)
from t_activi, t_tarea, t_tarea_rel, t_tarea_rel_rea
where
id_activi = @id_activi_del and
id_activi_tarea = id_activi and
id_tarea_tarea_rel = id_tarea and
id_tarea_rel_tarea_rel_rea = id_tarea_rel

select @horas_planificadas = count(*)
from t_activi, t_tarea, t_tarea_rel, t_tarea_rel_def
where
id_activi = @id_activi_del and
id_activi_tarea = id_activi and
id_tarea_tarea_rel = id_tarea and
id_tarea_rel_tarea_rel_def = id_tarea_rel

begin
if(@horas_realizadas > 0 )

begin
raiserror('No se pueden eliminar Actividades con registros de horas
realizadas o planificadas asociados', 16, 1)
rollback transaction
end

else if(@horas_planificadas > 0)
begin
raiserror('No se pueden eliminar Actividades con registros de horas
realizadas o planificadas asociados', 16, 1)
rollback transaction
end

end


sé a ciencia cierta, q la primera consulta, hecha fuera del trigger


devuelve
3.
no sé si es debido a que no pille bien el identificador de la fila que se
borra.

ayudaaaaaaa!!!

gracias de antemano


Preguntas similares