Проблема с триггером...

shurman
Дата: 10.10.2003 18:45:41
Извиняюсь за глупые вопросы, но всё-таки...

Есть таблица duscus c FK theme, таблица theme с FK forum и соответственно таблица forum.
Для таблиц theme и forum установлено ON DELETE CASCADE.
На таблицу discus надо повесить триггер, управляющий счетчиком в theme и в forum подсчитывающим число ссылок на соответствующую запись. Если удалять по одной записи из discus, то проблем не возникает, но при удалении например записи из theme начинаются проблемы во-первых с определением величины на которую надо изменить счетчик, во-вторых с определением id записи в forum счетчик которой надо модифицировать....

Впринципе в theme подсчет правильный, а с forum посложнее....

Код типа этого (опять-таки извиняюсь за корявость):

CREATE TRIGGER del_discus ON [dbo].[discus] 

AFTER DELETE
AS
BEGIN
DECLARE @t table(theme INT,cnt INT)

INSERT INTO @t(theme,cnt) SELECT [theme],count(*) AS cnt FROM deleted GROUP BY [theme]
UPDATE themes SET [count]=[count]-(SELECT count(*) from deleted) FROM @t WHERE [id]=[theme]
END
Glory
Дата: 10.10.2003 22:39:43
А зачем промкжуточная таблица-то ???

UPDATE a SET [count]=a.[count]-b.cnt

FROM themes a
INNER JOIN (SELECT [theme],count(*) AS cnt FROM deleted GROUP BY [theme]) AS b ON a.[id]=b.[theme]