- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据库实验6触发器数据库实验6触发器
实验6 触发器
一、实验目的
1了解触发器的基本概念和功能。
掌握触发器的创建和使用方法。
二、相关知识
三、实验内容
(一)简单触发器练习:
1.用SQL Server Management Studio创建触发器,当学生表中有新的记录插入时,提示用户在选课表中加入相应的选课记录。具体步骤:
1)打开SQL Server Management Studio扩展到学生选课数据库,选择表触发器,右键单击,选择新建触发器,出现的触发器TransactSQL语句输入窗口‘学生表S中有新的同学加入,别忘了给他增加选课记录’
END
参考下图1。
图1触发器Transact-SQL语句输入窗口
2)在文本框中输入创建触发器的Transact-SQL语句(语句见上图),单击“检查语法”按钮进行语法的检查,检查无误后,单击“!执行”按钮。
3)打开查询分析器,在顶部的下拉框中选中“学生选课”数据库,运行INSERT语句在学生表中加入一条学生记录,如:
INSERT INTO S
VALUES(’S012’,刘东’,’男’,’22’,’,’D2’);
验证触发器,看看会出现什么结果?
4)创建好以后还可以在名字弹出项中选择要修改的触发器进行修改或删除。
(二)绩点计算
【特别注意,以下实验语句可以参考bb平台上的补充课件《T-SQL触发器实验参考资料》】
绩点计算方法请参考本文档最后面。
(1)课程学分绩点Grade的自动更新
1)添加1列:
用alter table … add … 语句给选课表SC增加一个属性:课程学分绩点Grade, 数据类型为 numeric(4,1);
alter table sc add Grade numeric(4,1)
2)创建一个触发器:当学生的某一门课的成绩有变化时(update)自动修改Grade值,并进行验证,采用after触发器
create trigger upd_Grade on SC
after update
as
if update(Score) --使用update(列)函数表示修改了某列的值
begin
if ((select Score from inserted) 60) --成绩小于,绩点为
update SC set Grade = 0
from inserted
where SC.Snum = inserted.Snum
and SC.Cnum = inserted.Cnum and inserted.Score is not null
--第一二个等式表示更新指定学生+课程的Grade,否则所有的行都更新了
else
update SC set Grade = (inserted.Score * 0.1 - 5)*C.Cfreq
FROM C,inserted --因为要用到学分,所以需要课程表C,注意这里from的用法
where SC.Snum = inserted.Snum and SC.Cnum = inserted.Cnum
and C.Cnum = inserted.Cnum and inserted.Score is not null
--第一二个等式表示更新指定学生+课程的Grade,第三个等式表示和C表进行连接,否则所有行都更新
End
注意:在update 触发器中
修改后的数据从inserted表中读取,
修改前的数据从deleted 表中读取
3)验证:
update SC set Score = 78 where Cnum = C003 and Snum = 0903330002
SELECT * FROM SC
看看结果
update SC set Score = 78 where Cnum = C003 and Snum = 0903330002
SELECT * FROM SC
看看结果
4)删除
最后如果不需要这个触发器了,删除:
drop trigger upd_Grade
5)仿照上面的例子,请写出insert触发器int_Grade,当插入一行时(插入的时候绩点还不知道,为null),自动更新该行的绩点Grade,写出创建触发器语句,写出验证语句,写出删除语句
【上交语句】
(2)平均学分绩点AvgGrade
1)添加1列:
用alter table … add… 语句给学生表S增加一个属性:平均学分绩点AvgGrade, 数据类型为 numeric(4,1);
【上交语句】
2)请写出insert触发器,当插入一行到SC表时,自动修改对应学生表S中该学生的 AvgGrade值,并进行验证
create trigger i
文档评论(0)