资源描述:
《SQL Server2008触发器练习题.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、触发器练习题1、创建触发器在学生信息管理系统中,学生信息表包含列“学号”、“姓名”、“性别”、“出生年月”、“班级号”;班级信息表中包含列“班级号”、“班级名称”、“人数”;课程信息表包含列“课程代号”、“课程名称”;学生成绩表包含列“学号”、列“课程代号”、列“成绩”,已用约束保证成绩的范围为0~100分。(用附录中的脚本创建)--1)在student上创建INSERT触发器stu_insert,要求在student表中插入记录时(要求每次只能插入一条记录),这个触发器都将更新class表中的class_nun列。并测试触发器stu_insert。cre
2、atetriggerstu_insertonstudentforinsertasif@@rowcount>1beginRAISERROR('Youcannotinsertmorethanonestudentatatime.',16,1)ROLLBACKTRANreturn--注意此处的return语句不能省略,因为在触发器脚本中的ROLLBACKTRAN语句之后还存在语句,那么将会执行这些语句,而为了其后的语句不执行,必须加入return语句endupdateclasssetclass_num=class_num+1whereclass_id=(selec
3、tclass_idfrominserted)print'class表中数据更新成功'go--测试1insertintostudentselect'','丽','女','1986-07-11','0601'unionallselect'','梅','女','1988-02-07','0601'--测试2insertintostudentvalues('','文','女','1986-09-21','0602')--2)修改题1中创建的INSERT触发器stu_insert,要求在student表中插入记录时(允许插入多条记录),这个触发器都将更新class表
4、中的class_nun列。并测试触发器stu_insert。altertriggerstu_insertonstudentforinsertasupdateclasssetclass_num=class_num+(selectcount(class_id)frominsertedwhereclass.class_id=inserted.class_id)print'class表中数据更新成功'go--测试1insertintostudentselect'','丽','女','1986-07-11','0601'unionallselect'','梅','女
5、','1988-02-07','0601'--测试2insertintostudentvalues('','文','女','1986-09-21','0602')--3)在student上创建DELETE触发器stu_delete,要求在student表中删除记录时,这个触发器都将更新class表中的class_nun列。并测试触发器stu_delete。createtriggerstu_deleteonstudentfordeleteasupdateclasssetclass_num=class_num-(selectcount(class_id)fro
6、mdeletedwhereclass.class_id=deleted.class_id)go--测试1deletefromstudentwherestu_id=''--测试2deletefromstudent--4)为防止其他人修改成绩,在score上创建UPDATE触发器sc_update,要求不能更新score表中的score列。测试触发器sc_update。createtriggersc_updateonscoreforupdateasifupdate(score)beginprint'不允许修改score列'rollbacktranendgo--
7、尝试修改score列updatescoresetscore=992、查看触发器相关信息:使用系统存储过程sp_help,sp_helptext,sp_helptrigger查看触发器相关信息。execsp_helpexecsp_helpsc_updateexecsp_helptextsc_updateexecsp_helptriggerstudentexecsp_helptriggerstudent,'insert'--附录:--创建数据库,准备数据createdatabasestudent_scoreGO--在数据库中创建三个表的结构usestudent
8、_scoreGOcreatetablestudent(stu_id