SQL学习笔记8 ---触发器

来源:互联网 发布:80端口为什么要备案 编辑:程序博客网 时间:2024/06/04 17:51

 创建触发器

create trigger deleteNewClass //在表NewClass中创建触发器deleteNewClass ,表中有数据删除时执行删除表News中Classid=3的数据
on NewClass
after delete
as
delete News from News,deleted whereNews.Classid=deleted.ID

 

 

Alter trigger newscount
on News
after update
as
begin

  declare @rownum int--存储当前是哪一行
  declare @titalcount int --总共有多少行
  declare @tempid int--保存当前行的newsid
  declare @countnews int
  declare @tab table(indexid int Identity(1,1) not null,newsid int)--定义一个临时表
  insert into @tab select ID from News--把News中的ID插入表中的newsid里
--  select *from @tab
  set @titalcount=@@ROWCOUNT--统计临时表有多少行
  set @rownum=1
  while @rownum<@titalcount--遍历临时表中的数据
     begin
        select @tempid=newsid from @tab where indexid=@rownum--把每一行的indexid赋给变量@tempid
        select  @countnews=COUNT(*) from NewClass where ID=@tempid--NewClass中ID=@tempid的总共数据
        update NewClass set countnews=@countnews  where ID=@tempid
        set  @rownum+=1
     end
end

 

deleted与inserted数据的差异

   Inserted 存放进行insert和update操作后的数据

   deleted存放进行delete和update操作前的数据

    二者结构与触发器作用的表结构是一样的,只是存放的数据有差异

   update操作相当于先进行delete再进行insert,所以在进行update操作时,修改前的数据拷贝一条道delete表中,修改后的数据存到触发器作用的表中,同时还要拷贝一条到inserted表中

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击