1. instead of / after /for 的区别

for 和 after的行为一样。他们和instead of最大的区别就是他们是在检查完约束之后建立工作表的。instead of 不仅能对表起作用还能对视图起作用,但是for 和after不能对视图起作用。一个表只可以有一个instead of的触发器但是可以有多个 for/after触发器。

 

2 当 delete 触发器被触发,则DELETED表记录了被删除的值。

在触发开启之前和触发结束之后,INSTERED和DELETED表都是认为它不存在的。两表的结构和被触发的表的结构是一致的。当 insert 触发器被触发,则INSTERED表记录了需要插入的值。当 delete 触发器被触发,则DELETED表记录了被删除的值。当 update 触发器被触发,则DELETED表记录了原表中的值,INSERTED表记录了原表中的值-被修改的值(减少为正数,增加为负数)。eg 原来表中的工资为3500,现在更新为4000。update 工资表 set salary=4000 where ....则 DELETED表中记录了 3500而 INSERTED表中记录了 4000

 

发出产品不能多于库存一半

CREATE TRIGGER ProductIsRationedON ProductsFOR UPDATEASIF EXISTS(SELECT 'True'FROM Inserted iJOIN Deleted dON i.ProductID= d.ProductIDWHERE (d.UnitsInStock-i.UnitsInstock)>d.UnitsInstock/2AND d.UnitsInStock-i.UnitsInStock>0)BEGINRAISERROR('Cannot reduce stock by more than 50%% at once',16,1)ROLLBACK TRANEND