前后触发器的理解,求大仙解释解释
自学到触发器这章节时,有点混乱,感觉创建后触发型触发器和创建前触发型触发器有点混淆了~~
创建后触发型的例子:
保证“商品表”中的单价列的值与“商品价格变动表”中单价列的值一致。
create trigger UnitPriceConsistent
on Table_PriceHistory for insert,update
as
declare @NewPrice money
select @NewPrice = SaleUnitPrice from inserted
update table_Goods set SaleUnitPrice = @NewPrice
where GoodsID in (select GoodsID from inserted)
问:是先执行as后面的语句,然后执行触发器进行插入和更新操作么。
创建前触发型的例子:
创建只允许删除会员积分低于200的顾客记录的触发器。
create trigger Deletecust
on table_Customer instead of delete
as
if not exists(select * from deleted where CardID in(
select CardID from Table_CardID where Score>=200))
delete from talbe_Customer where CardID in(select CardID from deleted)
问:创建前的不是不执行引发触发器执行的数据操作语句么,但感觉比如这个例子也是先执行as后面的
语句,条件满足了才执行触发器的DELETE操作啊(跟创建后的一样思想啊)~貌似用创建后的去做这题只要把 ‘instead of’改为‘for’就可以了...请大家帮我解释下。还有,用exists,Score<200代替文中的notexists,Score>=200,可以么
请大家就以上两个例子为我讲解先触发器前后型的区别~~谢谢~~