• 触发器


    --存储过程
    --利用存储过程查找语文教师张晓华所教课程的学生的分数,
    --过80的算优秀,优秀人数超过3个人即为【教师评测达标】
    --若不到三个人,【不达标】
    create proc yi
    @tname varchar(50)='张晓华'
    as
    declare @shu int
    select @shu=COUNT(*) from score where code in (select code from Student where yujiao=(select top 1code from teacher where name=@tname))and yufen>80
    if @shu>3
    print '教师评测达标'
    else
    print '不达标'
    go
    exec yi

    select *from student
    select * from teacher
    select * from score

    --禁用所有触发器的语句
    alter table student disable trigger all
    --启用所有触发器的语句
    alter table student enable trigger all
    --如果知道触发器的名字,可以将all改成所要关闭或启用的触发器的名称


    create trigger TR_student_Delete --创建一个delete触发器
    on student --对于那一个表的
    instead of delete --替换掉delete 语句
    as
    insert into student values('成龙','男','三班',1007,1008,1009)
    go
    --执行一个delete语句,针对student表
    delete from student where code =4
    --执行上面语句的时候触发了TR_student_Delete触发器
    --因为里面是instead of 是替换掉我执行的这个delete语句
    --所以,code为4的数据没有被删除
    --并且添加进去了一行新的数据

    create trigger TR_student_Delete2 --创建一个delete触发器
    on student --对于那一个表的
    for delete --在执行了外部的delete语句后执行触发器里面的语句
    as --与after相同
    insert into student values('全智贤','女','二班',1004,1005,1006)
    go
    --执行delete语句
    delete from student where code =30
    --执行delete语句在student表上的时候,发现有触发器
    --查看到是for或after
    --首先执行完要执行的这个语句
    --然后执行触发器里面的语句


    --执行删除一条数据,
    --用deleted来表示被删除的那条数据,可以从中获取值
    create trigger TR_Teacher_delete
    on teacher
    instead of delete
    as
    declare @code int
    select @code =(select code from deleted)
    update teacher set name ='刘德华' where code = @code
    go
    --执行
    delete from teacher where code = 1005
    --上面的语句是应该在触发器前执行,所以用deleted表示这条数据
    --可以在触发器中获取这行数据里面的任何列
    --可以直接拿去使用


    --insert添加一条数据,inserted表示新添加的数据,
    --从中获取教师编号,
    --并且根据教师编号来查看是lesson是音乐么,如果是音乐变成语文。
    create trigger TR_teacher_Insert
    on teacher
    for insert
    as
    declare @code int
    select @code = (select code from inserted)
    declare @lesson char(10)
    select @lesson = lesson from teacher where code =@code
    if @lesson='音乐'
    update teacher set lesson ='语文' where code =@code
    go
    --执行
    insert into teacher values('谭咏麟','音乐',55,'1950-04-05')

    --对于INSERT 操作,inserted保留新增的记录,deleted无记录
    --对于DELETE 操作,inserted无记录,deleted保留被删除的记录
    --对于UPDATE操作,inserted保留修改后的记录,deleted保留修改前的记录

  • 相关阅读:
    C#库
    大话设计模式--简单工厂模式
    weka平台下手动造.arff的数据
    NIM博弈的必胜取法
    求一个全排列函数: 如p([1,2,3])输出:[123],[132],[213],[231],[312],[321]. 求一个组合函数 如p([1,2,3])输出:[1],[2],[3],[1,2],[2,3],[1,3],[1,2,3]
    哥德巴赫猜想
    C#格式化输出
    meta文件里指定资源
    chromatic aberration
    uber shader
  • 原文地址:https://www.cnblogs.com/yuyingming/p/4996835.html
Copyright © 2020-2023  润新知