1、数据库实验报告4分析解析华中敏 2012221104210052 2012级计科一班存储过程的创建和使用1:创建一个名称为“StuInfo”的存储过程,要求完成以下功能:在T_STUDENT表中查询05541班学生的学号、姓名、性别、出生日期和政治面貌五个字段的内容。CREATE PROCEDURE StuInfo ASSelect S_NUMBER AS 学号, S_NAME AS 姓名, SEX AS 性别, BIRTHDAY AS 出生日期, POLITY AS 政治面貌FROM T_STUDENTWHERE LEFT(S_NUMBER,5)=055412:创建一个存储过程StuScor
2、eInfo,完成的功能是在表T_STUDENT、表T_COURSE和表t_SCORE中查询以下字段:班级、学号、姓名、性别、课程名称、考试分数。-打开STUDENT数据库USE STUDENT -查询是否已存在此存储过程,如果存在,就删除它IF EXISTS (SELECT name FROM sysobjects WHERE name = StuScoreInfo AND type = P) DROP PROCEDURE StuScoreInfo GO -创建存储过程 CREATE PROCEDURE StuScoreInfo AS Select 班级=SUBSTRING(T_STUDENT
3、.S_NUMBER,1, LEN(T_STUDENT.S_NUMBER)-2), 学号=SUBSTRING(T_STUDENT.S_NUMBER, LEN(T_STUDENT.S_NUMBER)-1,2), T_STUDENT.S_NAME AS 姓名, SEX AS 性别, T_COURSE.C_NAME AS 课程名称, T_SCORE.SCORE AS 考试分数 FROM T_STUDENT,T_COURSE,T_SCORE WHERE T_STUDENT.S_NUMBER=t_SCORE.S_NUMBER AND T_COURSE.C_NUMBER=t_SCORE.C_NUMBER G
4、O3:创建一个带有参数的存储过程Stu_Info,该存储过程根据传入的学生编号,在T_STUDENT中查询此学生的信息。-删除已存在的存储过程USE Student_backIF EXISTS (SELECT name FROM sysobjects WHERE name = Stu_Info AND type = P) DROP PROCEDURE Stu_InfoGO-创建存储过程USE Student_backGOCREATE PROCEDURE Stu_Info S_NUMBER varchar(10)AS Select 班级=SUBSTRING(T_STUDENT.S_NUMBER,
5、1,LEN(T_STUDENT.S_NUMBER)-2), 学号=SUBSTRING(T_STUDENT.S_NUMBER,LEN(T_STUDENT.S_NUMBER)-1,2), S_NAME AS 姓名, SEX AS 性别, BIRTHDAY AS 出生日期, POLITY AS 政治面貌FROM T_STUDENTWHERE S_NUMBER=S_NUMBERGO4:创建一个带有参数的存储过程Stu_Age,该存储过程根据传入的学生编号,在T_STUDENT中计算此学生的年龄,并根据程序的执行结果返回不同的值,程序执行成功,返回整数0,如果执行出错,则返回错误号。USE Studen
6、t_backIF EXISTS (SELECT name FROM sysobjects WHERE name = Stu_Age AND type = P) DROP PROCEDURE Stu_AgeGO-创建存储过程USE Student_backGOCREATE PROCEDURE Stu_Age S_NUMBER varchar(10), Age int OUTPUTAS -定义并初始化局部变量,用于保存返回值DECLARE ErrorValue intSET ErrorValue=0-求此学生的年龄SELECT Age=YEAR(GETDATE()-YEAR(BIRTHDAY) F
7、ROM T_STUDENTWHERE S_NUMBER=S_NUMBER-根据程序的执行结果返回不同的值IF (ERROR0) SET ErrorValue=ERRORRETURN ErrorValueGO5:行前面创建的StuInfo存储过程,它是一个无参的存储过程。USE Student_backGOStuInfo6:存储过程StuScoreInfo。USE Student_backEXEC StuScoreInfo7:执行存储过程Stu_Info,该存储过程有一个输入参数“学号”,在执行时需要传入一个学号值。USE Student_backGOEXECUTE Stu_Info S_NUM
8、BER=05541018:执行存储过程Stu_Age,该存储过程有一个输入参数“学号”,另外,还有一个输出参数Age。存储过程执行完后,有一个返回的状态值,这个值可以从变量ErrorValue得到。USE Student_backGODECLARE stuAge int, ReturnValue int, S_NUMBER char(10)SET S_NUMBER=0554101EXECUTE ReturnValue=Stu_Age S_NUMBER,stuAge OUTPUTPRINT 本程序的执行结果:PRINT 程序的返回值=+CAST(ReturnValue AS char(2)PRI
9、NT 学号为+RTRIM(S_NUMBER)+的学生的年龄是+CAST(stuAge AS char(2)+岁。9:使用系统存储过程查看Stu_Age存储过程的参数及其数据类型。USE Student_backGOsp_help Stu_AgeGO10:使用系统存储过程查看StuScoreInfo存储过程的相关的数据库对象。USE Student_backGOsp_depends StuScoreInfoGO11:修改前面创建的Stu_Info存储过程,使之完成以下功能:根据传入的学号,在表T_STUDENT、表T_COURSE和表t_SCORE中查询此学生的班级、学号、姓名、性别、考试课程名
10、称和考试分数。USE Student_backGOALTER PROCEDURE Stu_Info S_NUMBER varchar(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), T_STUDENT.S_NAME AS 姓名, SEX AS 性别, T_COURSE.C_NAME AS 课程名称, SCORE AS 考试成绩FROM T_STUDENT,T_COURSE
11、,t_SCOREWHERE T_STUDENT.S_NUMBER=S_NUMBERAND T_STUDENT.S_NUMBER=t_SCORE.S_NUMBERAND T_COURSE.C_NUMBER=t_SCORE.C_NUMBERGO-执行修改后的Stu_Info存储过程:USE Student_backGOEXEC Stu_Info 0554101GO12:使用系统存储过程将Stu_Info存储过程的名称修改为Stu_Info_SCORE。USE Student_backGOSp_rename Stu_Info, Stu_Info_SCOREGO13:使用DROP命令删除StuInfo
12、和StuScoreInfo两个存储过程。USE Student_backGODROP procedure StuInfo, StuScoreInfoGO实验五:触发器的创建和使用1:创建一个INSERT触发器“TR_Stu_Insert”,当在T_STUDENT表中插入一条新记录时,触发该触发器,并给出“你插入了一条新记录!”的提示信息。 - =- Template generated from Template Explorer using:- Create Trigger (New Menu).SQL- Use the Specify Values for Template Paramet
13、ers - command (Ctrl-Shift-M) to fill in the parameter - values below.- See additional Create Trigger templates for more- examples of different Trigger statements.- This block of comments will not be included in- the definition of the function.- =SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO- =- Auth
14、or: Name- Create date: - Description: - =CREATE TRIGGER dbo.TR_Stu_Insert ON dbo.T_STUDENT AFTER INSERTAS BEGIN - SET NOCOUNT ON added to prevent extra result sets from - interfering with SELECT statements. SET NOCOUNT ON;DECLARE msg char(30) SET msg=你插入了一条新记录! PRINT msg - Insert statements for trigger hereENDGO2:创建了Stu_Insert触发器后,查看向T_STUDENT表中插入数据时,此触发器所完成的功能。USE Student_backGOinsert
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1