资源描述:
《数据库原理与应用(存储过程与触发器的应用).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《数据库原理与应用》实验报告题目:实验七:存储过程与触发器的应用学号:姓名:沈宇杰日期:2013/5/30实验预习情况:一:实验目的:①:掌握创建存储过程的方法和步骤②:掌握存储过程的使用方法③:掌握创建触发器的方法和步骤④:掌握触发器的使用方法二:实验内容:①:存储过程的创建、执行和删除②:触发器的创建、执行和删除三:实验示例:一:创建触发器:对于STUDENT数据库,表STUDENT的CLASS_ID列与表CLASS的CLASS_ID满足下列参照完整性规则:7.1创建触发器A.向STUDENT插入或修改一记录时,该字段在STUDE
2、NT表中的对应值也做相应的修改B.修改CLASS表的CLASS_ID字段值时,该字段在STUDENT表中对应值也做相应的修改C.删除CLASS表中一记录的同时删除该记录CLASS_ID字段值在STUDENT表中对应的记录在查询分析器编辑窗口输入下列触发器的代码并执行。①:向STUDENT表中插入或修改一记录时,通过触发器检查记录的CLASS_ID值在CLASS表中是否存在,若不存在,则取消插入或删除操CREATETRIGGERSTUDENTINSONDBO.STUDENTFORINSERT,UPDATEASBEGINIF(SELECT
3、INS.CLASS_IDFROMinsertedINS)NOTIN(SELECTCLASS_IDFROMCLASS)ROLLBACKENDGOAFTER指定DML触发器仅在触发SQL语句中指定的所有操作都已成功执行时才被触发。所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成。如果仅指定FOR关键字,则AFTER为默认值。不能对视图定义AFTER触发器。注意:书上的P162页的语法和SQLSERVER2008中的语法可能不大一样,SQLSERVER2008中并没有BEFORE、FOREACHROW等关键字。且语法变动较大。②
4、:修改CLASS表的CLASS_ID字段时候,该字段在STUDENT表中的对应值也做相应修改CREATETRIGGERCLASSUPDATEONDBO.CLASSFORUPDATEASBEGINIF(COLUMNS_UPDATED()&01)>0UPDATEStudentSETCLASS_ID=(SELECTINS.CLASS_IDFROMINSERTEDINS)WHERECLASS_ID=(SELECTCLASS_IDFROMDELETED)ENDGO释:COLUMNS_UPDATED():返回一串二进制数,譬如:若要检查第2,3,
5、4行是否被修改,则计算:2^(2-1)+2^(3-1)+2^(4-1)=14,然后COLUMNS_UPDATED()&14即可。此例题中&01则代表了查看CLASS表中的第一行有无被修改。SETCLASS_ID=(SELECTINS.CLASS_IDFROMINSERTEDINS)WHERECLASS_ID=(SELECTCLASS_IDFROMDELETED)此语句的意思是:若是CLASS中的CLASS_ID被修改了(删除旧值插入新值,故只要被删除过则认为数据被更新),则相应地修改STUDENT表中CLASS_ID的值。③:删除CL
6、ASS表中一记录的同时删除该记录CLASS_ID字段值在CLASS表中对应的记录CREATETRIGGERCLASSDELETEONDBO.CLASSFORDELETEASBEGINDELETEFROMStudentWHERECLASS_ID=(SELECTCLASS_IDFROMDELETED)ENDGO我觉得是“删除CLASS表中一记录的同时删除该记录CLASS_ID字段值在STUDENT表中对应的记录,实验册上写错了吧。7.2创建存储过程①:添加学生记录的存储过程STUDENTAddCREATEPROCEDURESTUDENTA
7、dd(@SnoCHAR(9),@SnameCHAR(8),@SsexCHAR(2),@SageSMALLINT,@SdeptCHAR(2),@CLASS_IDNCHAR(10))ASBEGININSERTINTOStudentVALUES(@Sno,@Sname,@Ssex,@Sage,@Sdept,@CLASS_ID)ENDRETURNGO②:修改学生记录的存数过程STUDENTUpdateCREATEPROCEDURESTUDENTUpdate(@SnoNCHAR(9),@SnoCHAR(9),@SnameCHAR(8),@Sse
8、xCHAR(2),@SageSMALLINT,@SdeptCHAR(2),@CLASS_IDNCHAR(10)ASBEGINUPDATEStudentSETSno=@Sno,Sname=@Sname,Ssex=@Ssex