谢谢答复! 怎么写呢?一般的触发器是这样:REATE TRIGGER triggername AFTER UPDATE on tablename FOR EACH ROW,想指到具体的字段怎么写呢? 我看以前的一些贴子用update(字段名)来判断,可我试过了,mysql不认。
CREATE TRIGGER upd_check BEFORE UPDATE ON account FOR EACH ROW BEGIN IF NEW.amount < 0 THEN SET NEW.amount = 0; ELSEIF NEW.amount > 100 THEN SET NEW.amount = 100; END IF; END;
DELIMITER | CREATE TRIGGER trg_CheckApplyStock BEFORE UPDATE ON t_ApplyStock FOR EACH ROW BEGIN IF OLD.F_Check=0 && NEW.F_Check=1 THEN
IF EXISTS(SELECT top 1 * FROM t_StockOrderDetail a,inserted b WHERE a.F_LinkBill = b.F_BillID)
ROLLBACK TRANSACTION
raiserror('本单已被采购订单引用,不能反审!!',18,18) END IF; END IF; | DELIMITER ;这是改后的代码,现在的问题是 IF EXISTS(SELECT top 1 * FROM t_StockOrderDetail a,inserted b WHERE a.F_LinkBill = b.F_BillID) THEN 和raiserror('本单已被采购订单引用,不能反审!!',18,18) 不能通过
怎么写呢?一般的触发器是这样:REATE TRIGGER triggername AFTER UPDATE on tablename
FOR EACH ROW,想指到具体的字段怎么写呢?
我看以前的一些贴子用update(字段名)来判断,可我试过了,mysql不认。
FOR EACH ROW
BEGIN
IF NEW.amount < 0 THEN
SET NEW.amount = 0;
ELSEIF NEW.amount > 100 THEN
SET NEW.amount = 100;
END IF;
END;
例原来amount值为1,当它被改为2时被触发,且只有它改变时才会被触发,其它字段改变时不会被触发
再次谢谢回复!
你如果想单独一个字段更新才触发的话,现在mysql应该还不行。
DELIMITER |
CREATE TRIGGER trg_CheckApplyStock BEFORE UPDATE ON t_ApplyStock
FOR EACH ROW BEGIN
IF OLD.F_Check=0 && NEW.F_Check=1 THEN
IF EXISTS(SELECT top 1 * FROM t_StockOrderDetail a,inserted b WHERE a.F_LinkBill = b.F_BillID)
ROLLBACK TRANSACTION
raiserror('本单已被采购订单引用,不能反审!!',18,18)
END IF;
END IF; |
DELIMITER ;这是改后的代码,现在的问题是 IF EXISTS(SELECT top 1 * FROM t_StockOrderDetail a,inserted b WHERE a.F_LinkBill = b.F_BillID) THEN
和raiserror('本单已被采购订单引用,不能反审!!',18,18)
不能通过
类似的功能,一般是在触发器中判断一下这一列的值是否有变量。比如在 update触发器中if new.col = old.col 则代表这一列没有更新。