我创建了一个表名profitLoss(具有属性月,借方,贷方,利润,状态),并希望使用触发器来执行利润和状态。插入循环后无法创建我的触发器。
这是我的触发码:
CREATE TRIGGER [PROFIT]
AFTER UPDATE OF [credit]
ON [profitLoss]
BEGIN
UPDATE profitLoss SET profitLoss =
cast (
(
(profitLoss.debit) - (profitLoss.credit)
) AS INT
) ;
when profitLoss.profit < 0 begin
UPDATE profitLoss SET status = 'LOSS' ;
when profitLoss.profit > 0 begin
UPDATE profitLoss SET status = 'PROFIT' ;
END;
它给出了结果:
near "when": syntax error:
答案 0 :(得分:0)
你不能在触发器体内使用WHEN(参见documentation)。 在这种情况下,您可以使用CASE expression在不同的值之间进行选择。
此外,没有WHERE子句的UPDATE语句将更新表中的所有行。 您必须搜索导致触发器运行的行,通常使用一些ID:
CREATE TRIGGER PROFIT
AFTER UPDATE OF credit ON profitLoss
BEGIN
UPDATE profitLoss
SET profitLoss = CAST(debit - credit AS INT),
status = CASE
WHEN profit < 0 THEN 'LOSS'
WHEN profit > 0 THEN 'PROFIT'
ELSE status
END
WHERE ID = NEW.ID;
END;