数据库实验报告4分析解析Word文档下载推荐.docx
《数据库实验报告4分析解析Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据库实验报告4分析解析Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
创建一个存储过程StuScoreInfo,完成的功能是在表T_STUDENT、表T_COURSE和表t_SCORE中查询以下字段:
班级、学号、姓名、性别、课程名称、考试分数。
--打开STUDENT数据库USESTUDENT
--查询是否已存在此存储过程,如果存在,就删除它
IFEXISTS(SELECTnameFROMsysobjects
WHEREname='
StuScoreInfo'
ANDtype='
P'
)
DROPPROCEDUREStuScoreInfo
GO
--创建存储过程
CREATEPROCEDUREStuScoreInfo
ASSelect班级=SUBSTRING(T_STUDENT.S_NUMBER,1,
LEN(T_STUDENT.S_NUMBER)-2),
学号=SUBSTRING(T_STUDENT.S_NUMBER,
LEN(T_STUDENT.S_NUMBER)-1,2),
T_STUDENT.S_NAMEAS姓名,
SEXAS性别,
T_COURSE.C_NAMEAS课程名称,
T_SCORE.SCOREAS考试分数
FROMT_STUDENT,T_COURSE,T_SCORE
WHERET_STUDENT.S_NUMBER=t_SCORE.S_NUMBERANDT_COURSE.C_NUMBER=t_SCORE.C_NUMBER
GO
3:
创建一个带有参数的存储过程Stu_Info,该存储过程根据传入的学生编号,在T_STUDENT中查询此学生的信息。
--删除已存在的存储过程
USEStudent_back
WHEREname='
Stu_Info'
)
DROPPROCEDUREStu_Info
--创建存储过程
CREATEPROCEDUREStu_Info
@S_NUMBERvarchar(10)
AS
Select班级=SUBSTRING(T_STUDENT.S_NUMBER,1,
LEN(T_STUDENT.S_NUMBER)-2),
学号=SUBSTRING(T_STUDENT.S_NUMBER,
LEN(T_STUDENT.S_NUMBER)-1,2),
WHERES_NUMBER=@S_NUMBER
4:
创建一个带有参数的存储过程Stu_Age,该存储过程根据传入的学生编号,在T_STUDENT中计算此学生的年龄,并根据程序的执行结果返回不同的值,程序执行成功,返回整数0,如果执行出错,则返回错误号。
Stu_Age'
DROPPROCEDUREStu_Age
CREATEPROCEDUREStu_Age
@S_NUMBERvarchar(10),
@AgeintOUTPUT
--定义并初始化局部变量,用于保存返回值
DECLARE@ErrorValueint
SET@ErrorValue=0
--求此学生的年龄
SELECT@Age=YEAR(GETDATE())-YEAR(BIRTHDAY)
--根据程序的执行结果返回不同的值
IF(@@ERROR<
>
0)
SET@ErrorValue=@@ERROR
RETURN@ErrorValue
5:
行前面创建的StuInfo存储过程,它是一个无参的存储过程。
StuInfo
6:
存储过程StuScoreInfo。
EXECStuScoreInfo
7:
执行存储过程Stu_Info,该存储过程有一个输入参数“学号”,在执行时需要传入一个学号值。
EXECUTEStu_Info@S_NUMBER='
0554101'
8:
执行存储过程Stu_Age,该存储过程有一个输入参数“学号”,另外,还有一个输出参数@Age。
存储过程执行完后,有一个返回的状态值,这个值可以从变量@ErrorValue得到。
DECLARE@stuAgeint,
@ReturnValueint,
@S_NUMBERchar(10)
SET@S_NUMBER='
EXECUTE@ReturnValue=Stu_Age@S_NUMBER,@stuAgeOUTPUT
PRINT'
本程序的执行结果:
'
程序的返回值='
+CAST(@ReturnValueASchar
(2))
学号为"
+RTRIM(@S_NUMBER)+'
"
的学生的年龄是'
+CAST(@stuAgeASchar
(2))+'
岁。
9:
使用系统存储过程查看Stu_Age存储过程的参数及其数据类型。
sp_helpStu_Age
10:
使用系统存储过程查看StuScoreInfo存储过程的相关的数据库对象。
sp_dependsStuScoreInfo
11:
修改前面创建的Stu_Info存储过程,使之完成以下功能:
根据传入的学号,在表T_STUDENT、表T_COURSE和表t_SCORE中查询此学生的班级、学号、姓名、性别、考试课程名称和考试分数。
ALTERPROCEDUREStu_Info
Select班级=SUBSTRING(T_STUDENT.S_NUMBER,1,LEN(T_STUDENT.S_NUMBER)-2),
学号=SUBSTRING(T_STUDENT.S_NUMBER,LEN(T_STUDENT.S_NUMBER)-1,2),
T_STUDENT.S_NAMEAS姓名,
T_COURSE.C_NAMEAS课程名称,
SCOREAS考试成绩
FROMT_STUDENT,T_COURSE,t_SCORE
WHERET_STUDENT.S_NUMBER=@S_NUMBER
ANDT_STUDENT.S_NUMBER=t_SCORE.S_NUMBER
ANDT_COURSE.C_NUMBER=t_SCORE.C_NUMBER
--执行修改后的Stu_Info存储过程:
EXECStu_Info'
12:
使用系统存储过程将Stu_Info存储过程的名称修改为Stu_Info_SCORE。
Sp_renameStu_Info,Stu_Info_SCORE
13:
使用DROP命令删除StuInfo和StuScoreInfo两个存储过程。
DROPprocedureStuInfo,StuScoreInfo
实验五:
触发器的创建和使用
创建一个INSERT触发器“TR_Stu_Insert”,当在T_STUDENT表中插入一条新记录时,触发该触发器,并给出“你插入了一条新记录!
”的提示信息。
--================================================
--TemplategeneratedfromTemplateExplorerusing:
--CreateTrigger(NewMenu).SQL
--
--UsetheSpecifyValuesforTemplateParameters
--command(Ctrl-Shift-M)tofillintheparameter
--valuesbelow.
--SeeadditionalCreateTriggertemplatesformore
--examplesofdifferentTriggerstatements.
--Thisblockofcommentswillnotbeincludedin
--thedefinitionofthefunction.
--================================================
SETANSI_NULLSON
SETQUOTED_IDENTIFIERON
--=============================================
--Author:
Name
--Createdate:
--Description:
CREATETRIGGERdbo.TR_Stu_Insert
ONdbo.T_STUDENT
AFTERINSERT
BEGIN
--SETNOCOUNTONaddedtopreventextraresultsetsfrom
--interferingwithSELECTstatements.
SETNOCOUNTON;
DECLARE@msgchar(30)
SET@msg='
你插入了一条新记录!
PRINT@msg
--Insertstatementsfortriggerhere
END
创建了Stu_Insert触发器后,查看向T_STUDENT表中插入数据时,此触发器所完成的功能。
insert