加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

触发器

发布时间:2020-12-12 15:01:43 所属栏目:MsSql教程 来源:网络整理
导读:sqlserver2000支持两种类弄的触发器:AFTER触发器和INSTEAD OF触发器。其中AFTER触发器要求只有执行某一操作(insert update delete)这后,触发器才被触发,且只能在表上定义。可以针对表的同一操作定义多个AFTER触发器。对于AFTER触发器可以定义哪一个触发器

sqlserver2000支持两种类弄的触发器:AFTER触发器和INSTEAD OF触发器。其中AFTER触发器要求只有执行某一操作(insert update delete)这后,触发器才被触发,且只能在表上定义。可以针对表的同一操作定义多个AFTER触发器。对于AFTER触发器可以定义哪一个触发器被最先触发,哪个被最后触发

INSTEAD OF 触发器表示并不执行其定义的操作(insert update delete),而仅是执行触发器本身。即可在表上定义INSTEAD OF 触发器,也可以在视图上定义INSTEAD OF触发器,但对同一操作只能定义一个INSTEAD OF触发器.

inserted表和deleted表

每个触发器有两个特殊表:inserted和deleted表.这两个表都是逻辑表,并且这两个表由系统管理的,存储在内存中,不是存储在数据库中,因此不充许用户直接对其修改。它们在结构上总是与触发器作的表相同。这两个表是动态驻留在内存中的,当触发器工作完成后,这两个表也被删除。这两个表主要保存因用户操作而被影响响到的原数据值或更新值。另这两个表是只读的,即用户不能向这两个表写入内容,但可以引用表中的数据。

information表(s_no,s_name,s_sex,s_birth,s_address,s_class)

表课程course(c_no,c_name,c_type)

成绩表 course(semester,s_no,c_no,grade)

1创建一个udate 触发器,当更新course表中的课程号列时,激活触发器以同步级联更新score表中的相关课程号

CREATE trigger score_tri
on course
for update
as
declare @c_no char(12)
declare @c_no1 char(12)
set @c_no=(select c_no from inserted)
set @c_no1=(select c_no from deleted)
update score set
c_no=@c_no where c_no=@c_no1
print '级联score表更新成功'

创建一个DELETE触发器,当删除course表中的一条记录时,激活触发器以同步级联删除socre表中的相关记录

CREATE trigger cour_tri
on course
for delete
as
declare @c_no char(11)
select @c_no=c_no from deleted
delete score where
c_no=@c_no
print '更新成功'

3? 需要在数所表SCORE中插入记录时进行如下检查,当试图往SCORE插入学生信息表中不存在的学号或在课程表中并不存在的c_no,撤消插入操作,返回一条错语消息

create trigger score_insrt_trion scorefor insertasdeclare @s_no char(11)declare @c_no varchar(12)--获取新插入行的学号值select @s_no=information.s_no from information,insertedwhere information.s_no=inserted.s_noselect @c_no=course.c_nofrom course,insertedwhere course.c_no=inserted.c_noif @s_no is null or @c_no is nullbegin? --事务回滚撤消插入操作rollback transactionraiserror('不存在这样的学号或课程号',16,10)end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读