1、 触发器的创建实验实验一:创建一个 INSERT 触发器 “TR_Stu_Insert”,当在 STUDENT 表中插入一条新记录时,触发该触发器,并给出“你插入了一条新记录!”的提示信息。实现本题的方法如下:步骤一:在 SQL Server 管理控制台中,展开 STUDENT 数据库,右击 STUDENT 表中的“触发器”文件夹。从弹出的快捷菜单中选择“新建触发器”选项。步骤二:单击“查询”菜单中的“指定模板参数的值”菜单项,在“指定模板参数的值”对话框中,将参数“Schema_Name ”的值修改为“dbo” ,参数“Trigger_Name ”的值修改为“TR_Stu_Insert”,参
2、数“Table_Name”的值修改为“T_STUDENT”,参数“Data_Modification_Statements”的值修改为“INSERT” 。单击“确定”按钮。步骤三:在新建触发器模板窗口中,在 BEGIN 和 END 语句之间输入以下 3 条语句:DECLARE msg char(30)SET msg=你插入了一条新记录!PRINT msg步骤四:单击工具栏上的“执行”按钮,即可完成此触发器的创建。实验二:创建了 Stu_Insert 触发器后,查看向 T_STUDENT 表中插入数据时,此触发器所完成的功能:检查该学生的选修课程必须在 3 门以上,否则拒绝该学生数据。在 SQL
3、 Server 管理控制台中新建一个查询 ,并输入以下 SQL 语句:USE STUDENTGOinsert into T_STUDENT (S_NUMBER,S_NAME,SEX) values(0554115,王小帆,女)GO实验三:创建一个 AFTER 触发器,要求实现以下功能:在 SCORE 表上创建一个插入、第 10 章 触发器的创建和使用更新类型的触发器 TR_ScoreCheck,当在 SCORE 字段中插入或修改考试分数后,触发该触发器,检查分数是否在 0-100 之间。程序清单如下:USE STUDENTGOCREATE TRIGGER TR_ScoreCheckON T_S
4、COREFOR INSERT, UPDATE ASIF UPDATE(SCORE)PRINT AFTER 触发器开始执行BEGINDECLARE ScoreValue realSELECT ScoreValue=(SELECT SCORE FROM inserted)IF ScoreValue100 OR ScoreValue0 PRINT 输入的分数有误,请确认输入的考试分数!ENDGO实验四:创建一个 AFTER 触发器,要求如下:在 STUDENT 表上创建一个删除类型的触发器 TR_Stu_Delete,当在 T_STUDENT 表中删除某一条记录后,触发该触发器,在T_SCORE 表
5、中删除与此学号对应的记录。USE STUDENTGOIF EXISTS(SELECT name FROM sysobjects WHERE name =TR_Stu_Delete AND type = TR)DROP TRIGGER TR_Stu_DeleteGOCREATE TRIGGER TR_Stu_DeleteON T_STUDENT FOR DELETEAS PRINT 删除触发器开始执行第 10 章 触发器的创建和使用DECLARE StuNum char(10)PRINT 把在 T_STUDENT 表中删除的记录的 S_NUMBER 赋值给局部变量StuNum。SELECT St
6、uNum=S_NUMBERFROM deletedPRINT 开始查找并删除 T_SCORE 表中的相关记录DELETE FROM T_SCORE WHERE S_NUMBER=StuNumPRINT 删除了 T_SCORE 表中的学号为+RTRIM(StuNum)+ 的记录。GO实验五:创建一个 INSTEAD OF 触发器,要求实现以下功能:在 T_COURSE 表上创建一个删除类型的触发器 TR_NotAllowDelete,当在 T_COURSE 表中删除记录时,触发该触发器,显示不允许删除表中数据的提示信息。程序清单如下:USE STUDENTGOIF EXISTS(SELECT name FROM sysobjects WHERE name =TR_NotAllowDelete AND type = TR)DROP TRIGGER TR_NotAllowDeleteGOCREATE TRIGGER TR_NotAllowDeleteON T_COURSEINSTEAD OF DELETEASPRINT INSTEAD OF 触发器开始执行PRINT 本表中的数据不允许被删除!不能执行删除操作!GO