• [SQL2005触发器学习]3、Instead Of触发器


    1、Instead Of触发器的工作原理
        Instead Of触发器与After触发器的工作流程是不一样。After触发器是在SQLSERVER服务器接到执行SQL语句请求之后,先建立Inserted和Updated临时表,然后在更改物理表上的数据,最后才激活触发器程序。而Instead Of触发器在SQLSERVER服务器接到执行SQL语句请求,建立Inserted和Updated临时表后就激活了Instead Of触发器程序,至于SQL语句的请求如何操作数据就不在管了,把执行权全权叫给了Instead Of触发器。
    2、Instead Of触发器使用范围
        ♣ 数据表里的数据禁止修改 
        ♣ 有可能要回滚修改的SQL语句,有些判断需要在执行之前进行,所以After触发器并不是最好的选择,Instead Of触发器更合适。
        ♣ 在试图中使用触发器, After触发器不能在视图中使用。
        ♣ 用自己 的方式去修改数据。可以用Instead Of 触发器来控制数据的修改方式和流程。
    3、注意事项
        ☞ Instead Of触发器和After触发器均不能建立在临时表上。
        ☞ 在同一个数据表中,对每个操作(Insert,Update,Delete)只能建立一个Instead Of触发器。
        ☞ writetext语句不能触发Insert和update类型的触发器。
        ☞ Truncate Table 语句类似于Deleteuju,但是它不激活触发器。
    4、Instead Of触发器实例    

    Create Trigger OrderDetail_Insert
    ON OrderDetail
    Instead
    Of Insert
    AS
    Begin
    Set Nocount On; /*屏蔽触发器里Insert语句执行完后返回的所影响的行数的消息*/
    Declare @Orderid int,@Price money,@discount real
    select @OrderId=OrderId,@Price=Price,@Discount=Discount from Inserted
    if(@Discount)>0.6
    begin
    print '折扣不能大于0.6'
    end
    else
    begin
    insert into OrderDetail(OrderId,Price,Discount) values(@OrderId,@Price,@discount)
    end
    End
     
  • 相关阅读:
    UML 结构图之类图 总结
    UML 结构图之包图 总结
    UML 行为图之用例图 总结
    一位36岁程序员的困惑(转)
    某程序员转行前的感慨 告别程序员生涯
    PHP有前途吗?
    使用d3制作上下结构的股权穿透图
    elementUI实现动态拖拽表头、可拖拽列
    使用iview框架,如何进行输入框或者按钮的关联验证
    iview的Modal组件点击确定按钮如何阻止弹窗的关闭
  • 原文地址:https://www.cnblogs.com/heimirror/p/2000014.html
Copyright © 2020-2023  润新知