数据库应用程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上机实验六

【实验目的】

(1) 学会在图形用户界面下使用Management Studio工具和Transact-SQL语句创建存储过程。

(2) 掌握存储过程的管理方法。

(3) 学会在图形用户界面下使用Management Studio工具和Transact-SQL语句创建触发器。

(4) 掌握触发器的管理方法。

(5) 通过实验理解存储过程和触发器的作用。

【实验准备】

(1) 已经接入局域网的网络实验室。

(2) 机器上已安装SQL Server 2008 R2。

【实验内容及步骤1】

(1)创建一个名为xs_bk_proc的存储过程,完成不及格学生的学号、姓名、课程名,成绩和班号信息的查询。

CREATE PROC xs_bk_proc AS

SELECT学号,姓名,课程名,成绩,班号信息

FROM学生基本信息JOIN课程ON学生基本信息.学号=课程.学号JOIN班级ON学生基本信息.学号=班级.学号

where成绩<60

(2)在STUMS数据库中,基于班级表创建一个名为BJ_INFO_PROC的存储过程,根据班号查询班主任、班长和教室位置信息。

CREATE PROC BJ_INFO_PROC

@BH CHAR(2)

AS

SELECT班主任,班长,教室位置

FROM班级

WHERE班号=@BH

(3)创建一个名为xs_tj_proc的存储过程,实现按性别统计学生数。

CREATE PROC xs_tj_proc

@count int OUTPUT

AS

SELECT@count=COUNT(*)

FROM班级

GROUP BY性别

(4)调用上述xs_tj_proc存储过程,统计女生人数。

DECLARE@num int

EXEC xs_tj_proc@num OUTPUT

PRINT@num

(5)创建一个名为xk_ins_proc的存储过程,用于向选课表插入记录。

CREATE PROCEDURE xk_ins_proc

@KCH char(4),

@KCM varchar(20),

@KCXZ char(1),

@XF tinyint

AS

INSERT课程V ALUES(@KCH,@KCM,@KCXZ,@XF)

(6)创建一个名为xk_cj_proc的存储过程,根据课程号更新选课表中的对应成绩,令成绩等于0。

ALTER PROC xk_cj_proc

@KCH char(6)

AS

SELECT成绩AS'0'

FROM选课

where课程号=@KCH

(7)使用系统存储过程查看xk_cj_proc的定义信息、一般信息和相关性信息。

EXEC sp_helptext xk_cj_proc

EXEC sp_help xk_cj_proc

EXEC sp_depends xk_cj_proc

(8)使用ALTER PROCEDURE 命令修改xs_tj_proc存储过程,实现按系部统计学生数。

ALTER PROCEDURE xs_tj_proc

@count int OUTPUT

AS

SELECT@count=COUNT(*)

FROM学生

GROUP BY系部

(9)将存储过程xs_tj_proc重命名为xs_xibu_proc。

sp_rename'xs_tj_proc','xs_xibu_proc'

(10)删除xk_ins_proc、xk_cj_proc存储过程。

DROP PROCEDURE xk_ins_proc,xk_cj_proc

【实验内容及步骤2】

写出T-SQL语句,对STUMS数据库进行如下操作:

(1)在专业表上创建一个名为zy_all_trigger触发器,使得用户执行删除、插入、修改操作时,该触发器被触发,自动给出报警信息“不能更改此表数据!”,并撤销此次操作。

CREATE TRIGGER zy_all_trigger ON专业

FOR DELETE,UPDATE,INSERT

AS

BEGIN

PRINT('不能更改此表数据!')

ROLLBACK TRANSACTION

END

(2)在系部表上创建一个名称为xbjs_delete_trigger触发器,当删除系部表中的记录时,如果教师表中引用了此记录的系部代码,则提示“用户不能删除!”,否则提示“记录已删除!”。

CREATE TRIGGER xbjs_delete_trigger ON系部

FOR DELETE

AS

DECLARE@XBDM CHAR(9)

SELECT@XBDM=教师.系部代码

FROM教师,deleted

WHERE教师.系部代码=deleted.系部代码

IF@XBDM<>' '

PRINT('用户不能删除!')

ELSE

PRINT('记录已删除!')

ROLLBACK TRANSACTION

(3)在选课表上创建一个名称为xkkc_insert_trigger触发器,当向选课表中插入记录时,检查该记录的课程号在课程表中是否存在,如果不存在,则不允许插入。

CREATE TRIGGER xkkc_insert_trigge ON选课

FOR INSERT

AS

DECLARE@KCH CHAR(9)

SELECT@KCH=课程表.课程号

FROM课程,inserted

WHERE课程表.课程号=inserted.课程号

IF@KCH<>' '

PRINT('记录插入成功')

ELSE

BEGIN

PRINT('课程号不存在,不能插入记录,插入将终止!')

ROLLBACK TRANSACTION

END

(4)在学生基本信息表上创建一个名称为xsxk_updare_trigger触发器,当修改学生基本信息表中的学号时,如果选课表中引用了该学号,则作同样的修改,并提示“记录已修改!”。

CREATE TRIGGER xsxk_updare_trigger ON学生基本信息

FOR UPDATE

AS

IF UPDATE(学号)

BEGIN

相关文档
最新文档