Не отрабатывает триггер...

shurman
Дата: 15.10.2003 14:42:31
Есть три таблицы: forums -> themes -> discus с древовидной связью между собой и полюс третья таблица сама является деревом. В таблице discus на удаление прописаны два триггера, один для поддержки древовидной структуры, другой обновляет таблицу forums. Так же в таблице themes прописано каскадное удаление записей из discus.

Так вот. Когда делаю DELETE FROM discus, таблица forums обновляется и соответственно таблица discus пуста. НО! Когда делаю DELETE FROM theme, то таблица discus как и должно быть пуста, но таблица forums уже не обновляется.

У кого какие соображения по этому поводу???
Berg
Дата: 15.10.2003 14:47:42
Запихни в триггера строки типа
print 'TEST TRIGGER'
и увидешь что отрабатывает, а что нет...
Может у тебя IF UPDATE() в триггере имеется или еще какие-нить условия не выполнены...

Короче пока тексты триггеров никто не видел вряд ли совет получишь...
iSestrin
Дата: 15.10.2003 14:47:59
какие настройки сервера по триггерам?

а вообще я бы не стал на эти настройки полагаться (вдруг при разработке другой бд расчитывали на другие настройки!), а написал бы все в триггерах лапками, чтобы работало при любых настройках
shurman
Дата: 15.10.2003 14:54:55
Триггеры типа этого:

CREATE TRIGGER del_discus ON dbo.discus 

AFTER DELETE
AS
BEGIN
UPDATE f SET f.[mess_cnt]=f.[mess_cnt]-tm.cnt
FROM forums AS f
INNER JOIN ( SELECT [id] AS tid, forum , cnt
FROM themes AS t
INNER JOIN (SELECT [theme],count(*) AS cnt FROM deleted GROUP BY deleted.[theme]) AS ds
ON ds.[theme]=t.[id]) AS tm
ON f.[id]=tm.[forum]

END


И


CREATE TRIGGER del_theme ON [dbo].[themes]
FOR DELETE
AS
BEGIN
DELETE FROM discus WHERE [theme] IN (SELECT [id] FROM deleted)
END


ну и еще такой есть:


CREATE TRIGGER del ON dbo.discus
AFTER DELETE
AS
BEGIN
DELETE FROM discus WHERE [parent] IN (SELECT [id] FROM deleted)
END
shurman
Дата: 15.10.2003 15:04:03
А мошть дело в использовании AFTER DELETE или FOR DELETE...???