zoukankan      html  css  js  c++  java
  • 在Sql server数据库中,关于触发器的创建、调用及删除

    触发器是当发生某个事件后自动的调用执行的特殊存储过程。
    Sql server中的3类触发器
    Insert:向数据表插入数据时,调用insert触发器。
    Update:更新数据时调用update触发器。
    Delete:删除数据时执行Delete触发器。
    Sql server中这三类触发器总是在执行操作语句后才被自动调用。

    三个虚拟表
    Inserted表在执行插入语句时临时缓存数据值,通过触发器的判断之后才正式插入成功。
    Updated表在更新数据是临时缓存数据值,功能同上。
    Deleted表在删除数据是临时缓存数据值,功能同上。

    Sql server中创建和使用触发器语法

    Create trigger trigger_name----创建名称
    On {table|view}----定义在表或者视图上
    [with encryption]----加密元数据
    {
    { {for|after|instead of}{[insert][,][update][,][delete]}触发器执行的条件
     [with append]
     [ont for replication]
    As----触发器要执行的操作
    [ {if update(column)----判断执行的是什么操作
     [{and|or}update(column)][,…n]
     |if(columns_updated(){bitwise_operator}updated_bitmask)----判断是否插入跟新了数据
     {comparison_operator}column[,…n]
    }]
    Sql_statement[,…n]操作语句
     }
    }

    for|after|instead of:for用于执行SQL语句时触发,after用于执行所有SQL语句后触发,instead of用于执行SQL语句前触发,替代执行SQL语句。

    columns_updated():用以和后面updated_bitmask参数指定的字段进行位操作判断数据的插入和更新。
    bitwise_operator:位操作符&,第1个字段为1,第2个字段为10,第2、3个字段为110,一次类推。
    有以上语法可以看出触发器是基于表或者视图的,和存储过程的区别是:存储过程不依赖表或者视图,表的删除对存储过程不影响,而触发器会随着表或者视图的删除被删除。

    使用insert触发器
    举例:在向score表插入数据时,要求‘学号’字段必须在student表中存在,‘课号’必须在course表中存在。

    create trigger trigger_insert
    on score
    for insert
    as
    declare @xuehao int,@kehao int
    select @xuehao=学号,@kehao=课号
    from inserted
    if @xuehao not in(select 学号 from student)
    begin
     rollback transaction
     print'学生表中不存在的学号,取消插入数据'
    end
    if @kehao not in(select 课号 from course)
    begin
     rollback transaction
     print'成绩表中不存在的课号,取消插入数据'
    end
  • 相关阅读:
    POJ1985 树的直径(BFS
    POJ2186 强连通分量+缩点
    AIM Tech Round 5C. Rectangles 思维
    POJ2553 汇点个数(强连通分量
    hdu6370 并查集+dfs
    UVALive 7037:The Problem Needs 3D Arrays(最大密度子图)
    POJ 3155:Hard Life(最大密度子图)
    HDU 5527:Too Rich(DFS+贪心)***
    HDU 5534:Partial Tree(完全背包)***
    Wannafly挑战赛1:Treepath(DFS统计)
  • 原文地址:https://www.cnblogs.com/m0488/p/12190766.html
Copyright © 2011-2022 走看看