学习中进步,进步中学习 初学触发器的小小收获

原创 2007年10月10日 00:30:00

前几天刚刚学了sql server 2005,在学到trigger 时知道怎样创建insert,delete,update触发器;觉得触发器在保护表中数据有很大的作用,当时我在想为表创建三个触发器太麻烦,如果能把三个触发器的功能写在一个触发器中不久很省事么?我就试着写这样一个触发器,但是想了很久都没有成功,问题处在在触发器中怎样判断对表进行了什么操作(insert,update,delete)以便于激发不同的处理,通过看书在论坛发帖子,经过一天多的努力终于搞定了。

create table anclass (    
     picname nvarchar(20),
     picurl nvarchar(20)
    )
go
create table nclass
    (
        picname nvarchar(20),   
        title nvarchar(20)
    )

insert into anclass values('部门1','100人')
go
insert into anclass values('部门2','200人')
go
insert into anclass values('部门3','300人')
go
insert into nclass values('部门1','logo1')
go
insert into nclass values('部门1','logo11')
go
insert into nclass values('部门1','logo111')
go
insert into nclass values('部门2','logo2')
go
insert into nclass values('部门3','logo3')

select * from anclass
go
select * from nclass

create trigger tri_anclass
on anclass
for insert,update,delete
as
declare @count1 int  --声明两个整型变量作统计
declare @count2 int 
declare @update_later nvarchar(10)
declare @update_before nvarchar(10)
begin
 set @count1 = 0  --为变量赋初值
 set @count2 = 0
 select @count1 = count(*) from inserted  --统计inserted表中的记录数
 select @count2 = count(*) from deleted   --统计deleted表中的记录数
 /*因为是after触发器,它是在记录变更后才被激活的,根据insert,delete和update
 操作后两张表(inserted,deleted)中记录数的变化来判断对表进行了哪种操作,从而匹配不同的
 处理函数*/
 if(@count1 > 0 and @count2 = 0) --insert操作
  begin
   print 'One line was inserted.'
  end
 if(@count1 = 0 and @count2 > 0) --delete操作
  begin
   delete from nclass where picname in (select picname from deleted)
  end
 if(@count1 = 1 and @count2 = 1) --update操作
  select @update_later = picname from inserted
  select @update_before = picname from deleted
  begin
   update nclass set picname = @update_later where picname = @update_before
  end
end

触发器的测试:update anclass set picname='doudou' where picname='部门1'
update anclass set picurl='101人' where picurl='100人'
delete from anclass where picname='部门3'

在执行after触发器时 inserted表和deleted表中的数据的变化和保存的数容 如下(个人理解)insert操作时 inserted表中有数据,保存的要插入的记录,deleted表中没有数据。delete操作时inserted表中没有数据deleted表中有数据,保存的是删除以后的记录,update操作时inserted和deleted表中都有数据,inserted中存放的是更新以后的数据,deleted中存放的是更新以前的数据,这样就可以更具这两张表中的记录数来判断在数据库操作时对表进行了什么操作(insert,delete,update)                                                

触发器学习《三》 常见问题、注意事项

模糊查询: 连接符:  ||  示例: select org_id  into getorgid from kq_org_persons where person_id like newId||'%...
  • wanggeying
  • wanggeying
  • 2016年08月08日 10:50
  • 153

系统学习深度学习(六) --LSTM总结

转自:http://blog.csdn.net/shincling/article/details/49362161 1. 概念: Long short-termmemory (LSTM)is a r...
  • App_12062011
  • App_12062011
  • 2017年01月14日 09:56
  • 4395

7个步骤掌握使用python进行机器学习

7个步骤掌握使用python进行机器学习有许多python机器学习资源在线免费提供.从哪开始?如何进行?从零到python机器学习大神只要7个步骤.作者Matthew Mayo.发表于KDnugges...
  • Er8cJiang
  • Er8cJiang
  • 2016年03月30日 12:26
  • 7997

Java进阶学习第一天——HTML入门

HTML概述 MyEclipse的简单使用 HTML标签 排版的标签 字体标签 标题标签 列表标签 图片标签 超链接标签 表格标签 表单标签(重点) 框架标签(了解)...
  • lutianfeiml
  • lutianfeiml
  • 2016年04月08日 21:51
  • 2937

Android学习的好总结,望大家同进步,争取率先从事哦

  • 2010年12月09日 14:13
  • 673KB
  • 下载

C语言学习与进步

  • 2013年05月23日 12:33
  • 225KB
  • 下载

一个即将成形的rootkit,愿与大家共享,相互学习,共同进步

  • 2009年03月17日 14:13
  • 34KB
  • 下载

PaaS进展共同学习进步

  • 2015年10月17日 23:43
  • 891KB
  • 下载

[ASP_NET]DataBinder_Eval用法_學習 積累 進步

  • 2008年09月06日 17:25
  • 25KB
  • 下载

扫雷外挂源码(无模板 供学习进步)

  • 2012年08月13日 01:25
  • 87KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习中进步,进步中学习 初学触发器的小小收获
举报原因:
原因补充:

(最多只允许输入30个字)