创建触发器
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表中