SQL Recursive trigger
SQL
Download (.zip)
USE pubs GO
CREATE TABLE BUDGET (dept_name varchar(30) not null, parent_name varchar(30) null, budget_amt money not null) GO INSERT INTO budget values ('Internal Training', 'Training', $10) INSERT INTO budget values ('Training', 'Services', $100) INSERT INTO budget values ('Services', NULL, $500) GO CREATE TRIGGER update_budget ON budget FOR update AS DECLARE @rows int SELECT @rows = @@ROWCOUNT IF ( @rows=0) RETURN IF ( @rows > 1) BEGIN PRINT 'Only one row can be updated at a time' ROLLBACK TRAN RETURN END IF (SELECT parent_name FROM inserted) IS NULL RETURN UPDATE budget SET budget_amt = budget_amt + (SELECT budget_amt FROM inserted) - (SELECT budget_amt FROM deleted) WHERE dept_name = (SELECT parent_name FROM inserted) GO
EXEC sp_dboption pubs, 'recursive triggers', true GO
-- Now test the trigger SELECT * FROM budget GO
UPDATE budget SET budget_amt = budget_amt + 10 WHERE dept_name = 'Internal Training' GO
-- Now check to see which rows have changed SELECT * FROM budget GO
-- Now decrement a value at an intermediate level UPDATE budget SET budget_amt = budget_amt - 50 WHERE dept_name = 'Training' GO
-- Now check to see which rows have changed SELECT * FROM budget GO
|