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

    --触发器:执行一个操作会自动 触发另外 一些 操作
    --触发器是针对有可能修改表数据的操作而言:增加删除和修改,对查询没用。
    --触发器是针对于某一个表执行什么样的操作进而触发触发器
    --语法:
    --create trigger tr_表.操作
    --after/for:操作之后触发
    --instead of:不执行当前操作,而使用触发器中的操作进行替代
    --on 操作的表 after/for|instead of insert|delete|update
    --as
    -- 逻辑语句
    --go
    if exists(select * from sysobjects where name='tr_classes_insert')
    drop trigger tr_classes_insert
    go
    create trigger tr_classes_insert
    on classes instead of insert
    as
    select * from student
    select * from result
    delete from classes where classid=21
    go

    insert into Classes values('恭恭敬敬')


    --关注inserted deleted表
    select * from inserted
    select * from deleted

    if exists(select * from sysobjects where name='tr_classes_insert')
    drop trigger tr_classes_insert
    go
    create trigger tr_classes_insert
    on classes after insert
    as
    print 'inserted:是操作之后的表,它是存储操作之后的数据,数据与原始的物理表没有关系,只与当前这次操作所影响的数据有关'
    select * from inserted
    print 'deleted:是操作之前的表,它是存储操作之前的数据,只存储与当前操作相关的数据'
    select * from deleted
    go
    insert into Classes values('gg')

    if exists(select * from sysobjects where name='tr_classes_update')
    drop trigger tr_classes_update
    go
    create trigger tr_classes_update
    on classes after update
    as
    print 'inserted:是操作之后的表,它是存储操作之后的数据,数据与原始的物理表没有关系,只与当前这次操作所影响的数据有关'
    select * from inserted
    print 'deleted:是操作之前的表,它是存储操作之前的数据,只存储与当前操作相关的数据'
    select * from deleted
    go
    update Classes set classname=classname+'123' where ClassId>18

    if exists(select * from sysobjects where name='tr_classes_delete')
    drop trigger tr_classes_delete
    go
    create trigger tr_classes_delete
    on classes after delete
    as
    print 'inserted:是操作之后的表,它是存储操作之后的数据,数据与原始的物理表没有关系,只与当前这次操作所影响的数据有关'
    select * from inserted
    print 'deleted:是操作之前的表,它是存储操作之前的数据,只存储与当前操作相关的数据'
    select * from deleted
    go

    delete from Classes where ClassId>18

    if exists(select * from sysobjects where name='tr_classes_insert')
    drop trigger tr_classes_insert
    go
    create trigger tr_classes_insert
    on classes after insert
    as
    declare @cid int,@cname nvarchar(50)
    select @cid=classid,@cname=classname from inserted
    --判断当前插入的班级名称是否在原始的物理中存在过
    if((select count(*) from classes where classname=@cname)>1)
    begin
    print '已经存在'
    delete from classes where classid=@cid
    end
    else
    print 'ok'
    go
    insert into Classes values('ggg')

    人的本事不是与生俱来的,不是你掌握了多少,而是当你面对一个未知问题的时候,你能用多少时间来掌握!
  • 相关阅读:
    微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程
    eclipse Specified VM install not found: type Standard VM, name
    eclipse中安装Open Explorer
    关于Java变量的可见性问题
    Win8&Win2012R2如何支持DOTA2输入法
    Adobe Flash player 10 提示:Error#2044:未处理的IOErrorEvent. text=Error#2036:加载未完成 的解决方法
    IntelliJ IDEA 12.1.4 解决中文乱码
    Win8.1RTM英文版安装中文语言包的两种方法
    在FlashDevelop里使用1.8版本的的TortoiseSVN
    [修复Win8.1 BUG] 解决Win8.1英文字体发虚不渲染问题
  • 原文地址:https://www.cnblogs.com/dianshen520/p/4349110.html
Copyright © 2011-2022 走看看