- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验八存储过程与触发器的应用实验报告
实验八:存储过程与触发器的应用
实验任务
1、存储过程的创建、执行和删除。
(1)使用学生选课数据库中的student表、course表;sc表创建一个带参数的存储过程—cjjicx。该存储过程的作用是:当任意输入一个学生的姓名时,将从三个表中返回该学生的学号、选修的课程名称和课程成绩。
Cjjicx的创建语句:
create procedure [dbo].[cjjicx] @sname nchar(10)
as
select s.sno,c.cname,sc.grade
from student as s inner join sc as sc on s.sno=sc.sno inner join course as c on c.cno=sc.cno
where sname=@sname
(2)执行cjjicx存储过程,查询“XXX”(自己选个名字)的学号、选修课程和课程成绩。
执行语句:
execute cjjicx 李勇(3)使用系统存储过程sp_helptext查看存储过程cjjicx的文本信息。使用系统存储过程sp_depends查看存储过程cjjicx中所涉及的对象信息。
EXEC sp_helptext cjjicx
(ii)EXEC sp_depends cjjicx
查看结果描述:
(i)
(ii)
(4)使用学生选课数据库中的student表,为其创建一个存储过程—jmxs。该存储过程的作用是:当执行该存储过程时,将返回计算机系学生的所有信息。
Jmxs创建语句:
CREATE PROCEDURE jmxs
AS
SELECT Student.Sno,Student.Sname,Student.Ssex,Student.Sage,Student.Sdept
FROM Student
WHERE Sdept=CS
GO
结果描述:存储过程jmxs已成功建立:右侧“系统存储过程”下拉列表中显示
(5)执行jmxs存储过程,查看计算机系学生的情况。
执行语句:
EXECUTE jmxs
结果描述:
(6)删除jmxs存储过程。
删除语句:
DROP PROCEDURE jmxs
结果描述:存储过程jmxs已被删去,其在右侧“系统存储过程”下拉列表中已不存在
2、触发器的创建、执行和删除。
(1)在学生选课数据库中建立一个名为insert_xh的INSERT触发器,存储在表中。该触发器的作用是:当用户向表中插入记录时,如果插入了在tudent表中没有的学生学号no,则提示用户不能插入记录,否则提示记录插入成功。
insert_xh的创建语句:
CREATE TRIGGER insert_xh
ON SC
FOR insert
AS
DECLARE @Sno nchar(10),@number int
SELECT @Sno=sno
FROM inserted
SELECT @number=count(*)
FROM student s
WHERE s.Sno=@sno
IF(@number=0)
BEGIN
PRINT 不能插入
ROLLBACK TRANSACTION
END
结果描述:
(2)为S_C数据库中的student表创建一个名为dele_stu的DELETE触发器,该触发器的作用是禁止删除student表中的记录。
dele_stu的创建语句:
CREATE TRIGGER dele_stu ON Student
INSTEAD OF DELETE
AS
PRINT数据删除不成功
GO
验证:第一步:在表Student中删除记录Sno=‘200215121’,运行如下命令:
DELETE FROM Student
WHERE Sno=200215121
运行结果:
第二步:运行如下命令,显示表Student中所有数据,发现记录Sno=‘200215121’仍存在
SELECT *
FROM Student
(3)为数据库中的sc表创建一个名为update_grade的UPDATE触发器,该触发器的作用是禁止更新sc表中的grade字段的内容。
update_grade的定义语句:
CREATE TRIGGER update_grade
ON SC FOR UPDATE
AS
IF UPDATE (Grade)
BEGIN
PRINT禁止更新Grade字段内容
ROLLBACK TRANSACTION
END
GO
验证:例如,运行如下命令,修改表SC中列Grade中的记录Sno=’200215121’AND Cno=’1’的数据
UPDATE SC
SET Grade=87
WHERE Sno=200215121AND Cno=1
结果显示:查询已完成,但有错误! 禁止更新Grade字段内
文档评论(0)