zoukankan      html  css  js  c++  java
  • sql 触发器

    解释

    • 如果一个Insert﹑update或者delete语句违反了约束,那么这条SQL语句就没有执行成功,因此“After”触发器也不会被激活。

    • “Instead of” 触发器可以取代激发它的操作来执行。它在Inserted表和Deleted表刚刚建立,其它任何操作还没有发生时被执行。因为“Instead of” 触发器在约束之前执行,所以它可以对约束进行一些预处理。

    • 对表的操作Inserted逻辑表Deleted逻辑表
      增加记录(insert) 存放增加的记录
      删除记录(delete) 存放被删除的记录
      修改记录(update) 存放更新后的记录 存放更新前的记录

      

    --格式
    create trigger trigger_Ceshi
    on {table_name|view_name} 
    {After|Instead of} {insert|update|delete}
    as 相应T-SQL语句
    
    insert into ceshi values(22)
    
    --例子
    create trigger trigger_Ceshi
    on ceshi
    after insert
    as
    begin
    --定义变量
    declare @id int, @Amount decimal(18,2);
    --在inserted表中查询已经插入记录信息
    select @id = id, @Amount = Amount from inserted;
    
    insert into ceshi2 values(@id,@Amount);
    end
    
    -------------------------------

    触发器怎么获取更新前的值呢

    --更新的动作你可以分2步理解,先delete ,再insert
    --所以,前的值在 deleted里
    --  后的值在 inserted里
    
     
    
    create trigger t_ATDATEState_update
    on ceshi
    for update
    as
    if update(ATDATEState)
    begin
     declare @Insteadof nvarchar(200)  --修改之前的
     declare @After nVARCHAR(200)  --修改之后的
     declare @S_id INT
     
     SELECT @After= id FROM INSERTED --从更新后的副本表(临时表)里面 获得要修改后的状态
     
     select  @Insteadof=id from deleted  --从之前删掉的临时表里面获取原来的值
     -- 插入记录,记录修改过程
     insert into ceshi2 values(@Insteadof,@After,getdate())
     
    end
  • 相关阅读:
    用才情绽放的幸福之花
    我的爱车,你在哪里
    爱在网络,有没有错
    假如能抱着美女写诗
    只想爱你
    创业者和爱因斯坦的10大共同点(不是不可比的)
    心的感谢
    成大事必备9种能力.9种手段.9种心态
    一颗新星在陨落
    C++/C学习笔记(九)
  • 原文地址:https://www.cnblogs.com/yangjinwang/p/5103040.html
Copyright © 2011-2022 走看看