大型数据库期末试题以及答案(3)

2019-08-30 23:58

Raiserror('该课程的选课人数超过,已经满额!',16,1) Else

Insert SC Select * From Inserted Go

--测试上面的触发器;

select Cno,count(sno) from SC group by Cno go

insert into SC Values('2006010103','J004',null) insert into SC Values('2006010103','J002',NUll) delete from SC where Sno='2006010103' and Cno='J004' go

drop Trigger Check_Count2

--3、在SC表上,建立一个Update后触发器Check_CNO1,当学生修改课程编号时,给出提示信息,并不能修改该列。

Create Trigger Check_CNO1 On SC After Update AS

If Update(CNO) Begin

Raiserror('课程号不能修改,请删除选课后,重新选课!',16,1) RollBack Transaction End Go

--测试上面的触发器;

select * from SC order by Cno

update SC set Cno='J001' where Sno='2006010105' and Cno='J004' go

drop Trigger Check_CNO1

6、存储过程的创建,执行,修改,删除(如:有输入参数,返回值的存储过程) 1、创建存储过程Price_order查询产品的名称,价格,并按照价格进行排序,并执行。

create proc Price_order as

select pName , price form products

order by price asc/desc go

2、创建存储过程Most_expensiveProduct查询最高价格的产品,并执行。 create proc Most_expensiveProduct as

select top 1 with ties pName , price form products

order by price desc go

3、创建存储过程TotalPrice,计算所有产品总价格,并执行。 create procedure TotalPrice as

select sum(price) as 总价格 from products go

创建:

1 CREATE PROCEDURE Get_Data 2 (

3 @Dealer_ID VARCHAR(50) 4 ) 5 AS

6 SELECT * FROM myData WHERE Dealer_ID = @Dealer_ID 修改:

1 ALTER PROCEDURE [dbo].[Get_Data] 2 (

3 @Dealer_ID VARCHAR(50) 4 ) 5 AS

6 SELECT * FROM myData WHERE Dealer_ID = @Dealer_ID 删除:drop procedure sp_name 7、函数的创建,修改,删除(如:标量函数) 创建:

CREATE FUNCTION [dbo].[函数名](参数) RETURNS NVARCHAR(15) AS BEGIN

修改:

alter function 名称

([{@参数名称 参数类型[=默认值]}[,n]]) returns @局部变量 table [with encryption] [as] begin 函数体

return 函数返回值 end

删除:drop function 函数名

一、创建标量用户定义函数

1、在学生信息管理系统中,学生信息表包含列“学号”、列“姓名”;课程信息表包含列“课程代号”、“课程名称”;学生成绩表包含列“学号”、列“课程代号”、列“成绩”,已用约束保证成绩的范围为0~100分。

编写标量函数fn_StudentScore,要求:输入一个学号和一个课程号,返回这个学生这门课的成绩,如果此学生没有选这门课,返回-1。

CREATE FUNCTION fn_StudentScore (@stu_id char(8) ,@course_id char(3)) returns int as begin

declare @a int

set @a=(select score from score

where stu_id=@stu_id and course_id=@course_id)

if @a is null begin

set @a=-1

end return @a end

2、测试函数fn_StudentScore(选两个例子,一个显示成绩,一个显示-1)

declare @score int

exec @score = fn_StudentScore @stu_id='0601009' ,@course_id='009' select @score as 成绩

declare @score int

exec @score = fn_StudentScore @stu_id='0601002' ,@course_id='009' select @score as成绩

3、在学生信息管理系统中,学生信息表包含列“学号”、列“姓名”;课程信

息表包含列“课程代号”、“课程名称”;学生成绩表包含列“学号”、列“课程代号”、列“成绩”,已用约束保证成绩的范围为0~100分。

编写用户定义函数fn_EvaluateOneStudent,要求:每次输入一个学号,计算该学生的所有课程的平均分,如果是85~100分,返回“优”;如果是75~84分,返回“良”;如果是65~74分,返回“中”;如果是0~64分,返回“差”。

CREATE FUNCTION fn_EvaluateOneStudent (@学号 char(8))

RETURNS varchar(10) AS

BEGIN

DECLARE @平均分 integer, @等级 varchar(10)

SELECT @平均分=AVG(score)FROM score WHERE stu_id=@学号 IF @平均分 BETWEEN 85 AND 100 SET @等级='优' ELSE

IF @平均分 BETWEEN 75 AND 84 SET @等级='良'

ELSE IF @平均分 BETWEEN 65 AND 74 SET @等级='中'

ELSE IF @平均分 BETWEEN 0 AND 64 SET @等级='差' RETURN @等级

END

4、测试函数fn_EvaluateOneStudent

例如:判断学号为0601002、0601006、0601009的同学的等级。

declare @等级 varchar(10),@学号 char(8) set @学号= '0601002'

exec @等级= fn_EvaluateOneStudent @学号=@学号 select @学号 as 学号,@等级 as 等级

二、创建多语句表值函数

1、在学生信息管理系统中,学生信息表包含列“学号”、列“姓名”;课程信息表包含列“课程代号”、“课程名称”;学生成绩表包含列“学号”、列“课程代号”、列“成绩”,已用约束保证成绩的范围为0~100分。

编写多语句表值函数fn_SexStudent,要求:当性别是“男”,返回男生表,性别是“女”,返回女生表,否则显示所有学生信息。 CREATE FUNCTION fn_SexStudent (@性别 varchar(8))

RETURNS @sexstudent table

( stu_id char(8) primary key,

stu_name char(10), stu_sex char(2),

stu_birthday smalldatetime

)

AS begin

if @性别='男'

insert @sexstudent select * from student where stu_sex='男'

else if @性别='女'

insert @sexstudent select * from student where stu_sex='女'

else

insert @sexstudent select * from student

return end

2、测试函数fn_SexStudent

select * from dbo.fn_SexStudent('女') select * from dbo.fn_SexStudent('男') select * from dbo.fn_SexStudent('全部')

三、创建内嵌表值函数

1、在学生信息管理系统中,学生信息表包含列“学号”、列“姓名”;课程信息表包含列“课程代号”、“课程名称”;学生成绩表包含列“学号”、列“课程代号”、列“成绩”,已用约束保证成绩的范围为0~100分。

编写内嵌表值函数fn_PassStudent,要求:每次输入一个课程号,返回及格(大于等于60分)的学生学号,姓名,本课程的名称和分数。 CREATE FUNCTION fn_PassStudent (@课程号 varchar(8))

RETURNS TABLE AS

RETURN (

SELECT a. stu_id,stu_name ,course_name, score FROM student AS a

INNER JOIN score AS b

ON a. stu_id =b. stu_id

INNER JOIN course AS c

ON b. course_id =c. course_id

WHERE b. course_id= @课程号 and score>=60 )

2、测试函数fn_PassStudent

select * from fn_PassStudent('005')

控制流:http://www.cnblogs.com/kissdodog/archive/2013/03/10/2953232.html 1、


大型数据库期末试题以及答案(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高一期末试题分类考点7 饮食中的有机化合物 有机高分子化合物

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: