您的位置:首页 > 数据库

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

2013-03-22 20:37 344 查看
创建触发器

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表中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: