zoukankan      html  css  js  c++  java
  • MS SQL TRIGGER

    Sql-Server 主要提供了两种机制来强制业务规则和数据完整性:约束constrain 和 触发器 trigger ..
    触发器在制定的表中发生变化时被调用以响应insert,update,delete事件。
    trigger可以查询其他表,包含复杂的T-sql语句,并支持回滚.

    每个触发器都会创建两个逻辑专用表inserted 和 deleted表,表结构与被触发作用的表结构相同 执行完毕后 与触发器相关的两个表都会被删除。
    当执行insert语句时,inserted表存放要向表中插入的所有行
    当执行delete语句时,deleted表存放要向表中删除的所有行
    当执行update语句时,相当于执行一个delete操作,再执行一个insert操作,旧的行先被移动到deleted表,然后再在新值插入到inserted表和目标表。


    一般的创建trigger : (for / after 语句 触发)

    use DB_name
    go
    --
    create trigger trigger_name
    on table_Name   // On 关键字
    [with Encryption] //加密
    for [/ after] {[insert [,]/ update [,] /delete]} --指定触发器只有在触发SQL语句中制定的所有操作都已经成功执行后才激发。(包括所有的级联和约束都检查成功后才能激发)
    AS
    [SQL-statements]

    go 

    利用触发器instead of 语句代替其他语句操作 (就不执行instead of 后面指定的SQL指令而执行Trigger体 [sql-statements])

    use Db_Name
    go
    create trigger Trigger_Name
    on Table_name
    instead of [insert,update,delete]
    as 
    [sql_statements]
    go

    例如在系统查询分析器执行 update t1 set column_1='aaa' where id=123 可以看到t1下123号的column_1值没有预期改变 而是按照Trigger中 [sql-statements]中的格式走了

    如何利用inserted 和 deleted表:
    例: 创建一个触发器 要求当插入 删除 更新 T1表数据时 能更新 T2表中相应的C2字段值 (C2是统筹t1的字段)

    use DB_Name
    go
    create trigger T_name
    on T1
    for update,insert,delete
    as 
    update T2 set C2=C2+1 where id=(select id from inserted)
    update T2 set C2=C2-1 where id=(select id from deleted)
    go
    //

    if update(column)语句 
    use DB_Name
    go
    Alter Trigger Test1
    on T1
    for update
    as
    if update(PWD) print 'password has changed..'
    go


    用来检测修改该字段的操作

    ps:允许多个事件insert delete update创建多个触发器 ,且相互不影响



    -----
    系统操作

    改名trigger :    sp_remane Old_Trigger_name,NewTrigger_Name

    禁用: Alter Table T1 DISABLE trigger Trigger_Name

    查询: select * from sysObjects where Type='TR'

     

     

     


     

    FROM : http://www.cnblogs.com/szroyman/archive/2006/01/15/317491.html

    DEMO:http://www.cnblogs.com/bgming/archive/2005/10/10/251419.html

    SEARCH FROM CNBLOGS KEY:SQL TRIGGER

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    数据库被注入daxia123原因及解决办法
    Alipay数字证书管理员权限问题
    关闭数据库的xp_cmdshell命令以防止黑客攻击
    如何使用JavaScript来写ASP程序
    VBscript操作DOM
    如何做好性能压测丨压测环境设计和搭建
    10倍性能提升!DLA SQL推出基于Alluxio的数据湖分析加速功能
    高德地图驾车导航内存优化原理与实战
    「直播实录」中英数据库专家谈:数据库的过去、未来和现在
    Flink 助力美团数仓增量生产
  • 原文地址:https://www.cnblogs.com/Athrun/p/1602724.html
Copyright © 2011-2022 走看看