复习笔记:数据库程序填空题

  • 程序填空题(每空2分,共10分)

根据下面某教学管理数据库的表结构,完成下面的程序填空题。

教师(职工号,姓名,学历,职称)

课程(课程号,课程名称,课程类别)

任课(职工号,课程号,周课时)

1.补填下面的存储过程的定义,使其被调用时,能根据调用程序提供的教师姓名使用输出参数返回该教师任课的课程数。

CREATE PROCEDURE 按教师姓名查询任课课程数

@姓名 VARCHAR(10),

@课程数 INT ________ OUTPUT______

AS

SELECT _________@课程数 = COUNT(*)________

FROM 教师 JOIN 任课 ON 教师.职工号 = 任课.职工号

WHERE __________姓名 = @姓名_______

2.完成下面的触发器的定义,当向任课表中插入记录时,触发器能判断若插入的记录使该教师的任课周课时总计超过20,则回滚插入操作。

CREATE TRIGGER 添加教学任务

ON 任课

AFTER INSERT

AS

DECLARE @总课时 INT

SELECT @总课时 = SUM(任课.周课时)

FROM 任课 JOIN ____ INSERTED ON任课.职工号 = INSERTED.职工号 ____

IF @总课时 > 20

____________ ROLLBACK TRANSACTION_______

  • 程序填空题(每空2分,共10分)

说明:为了管理学生的成绩,现建有学生管理数据库SCDB,以下各程序题以该数据库为操作对象。SCDB数据库包括student(学生表)、course(课程表)、sc(成绩表),表结构如下:

表1 student

字段名

数据类型

长度

是否允许为空

说明

Studentid

varchar

10

学号

Name

varchar

8

姓名

Sex

varchar

2

性别

表2 course

字段名

数据类型

长度

是否允许为空

说明

CourseID

Varchar

10

课程编号

CourseName

Varchar

40

课程名称

Teacher

Varchar

10

任课教师

表3 sc

字段名

数据类型

长度

是否允许为空

说明

Studentid

varchar

10

学号

CourseID

Varchar

10

课程编号

Grade

Float

成绩

1.补填下面的存储过程的定义,使其被调用时,能够根据学生的姓名,使用输出参数返回他的成绩的平均分。

USE SCDB

GO

CREATE PROCEDURE avgStudent

@Name varchar(50),@AVGScore  _____ float OUTPUT _________

AS

SELECT _______@AVGScore=AVG(Grade)__________

FROM SC,Student

WHERE __________Student.StudentID=SC.StudentID AND Name=@Name______

2.完成下面的触发器的定义,实现当修改sc成绩表的时候,判断成绩是否及格,如果及格就输出“该学生成绩合格”,否则输出“该学生成绩不合格”

Use SCDB

Go

Create trigger t_1

On sc

___________ For update ______

As

Declare @grade int

Select @grade=_________ grade from inserted _________

If @grade<60

Print ’ 该学生成绩不合格’

Else

Print ’ 该学生成绩合格’

  • 程序填空题(每空2分,共10分)

说明:为了管理学生的成绩,现建有学生管理数据库SCDB,以下各程序题以该数据库为操作对象。SCDB数据库包括student(学生表)、course(课程表)、sc(成绩表),表结构如下:

表1 student

字段名

数据类型

长度

是否允许为空

说明

Studentid

varchar

10

学号

Name

varchar

8

姓名

Sex

varchar

2

性别

表2 course

字段名

数据类型

长度

是否允许为空

说明

CourseID

Varchar

10

课程编号

CourseName

Varchar

40

课程名称

Teacher

Varchar

10

任课教师

表3 sc

字段名

数据类型

长度

是否允许为空

说明

Studentid

varchar

10

学号

CourseID

Varchar

10

课程编号

Grade

Float

成绩

1.补填下面的存储过程的定义,使其被调用时,能够根据学生的学号,使用输出参数返回他选的课程成绩总分。

Create proc CountStudent

@id varchar(10),@Score______ int output ________

As

Select __________@score=sum(grade)_______

From sc

Where _________ studentid=@id ________

2.完成下面的触发器的定义,创建触发器update_id,当修改student表中的学号字段后,自动修改sc成绩表中相应的学号。

USE SCDB

GO

Create trigger update_id

ON Student

For update

AS

If update(studentid)

begin

update sc

set Studentid=________(select Studentid from Inserted)_________

where studentid=________(select studentid from deleted)_________

end

  • 程序填空题(每空2分,共10分)

根据下面学生管理数据库的表结构,完成下面的程序填空题。

student_info(stud_id,stud_name)

course_info(course_id,course_name)

student_grade(stud_id,course_id,grade)

1.补填下面的存储过程的定义,使其被调用时,能够根据输入的课程号判断该课程有没有参加考试,如果参加考试了,则输出考试的人数和平均分,如果没有举行考试,则输出未参加考试。

CREATE PROCEDURE proc_1

@cid char(10)

AS

BEGIN

    DECLARE @grade numeric(5,2)

    DECLARE @mans int

              SELECT @mans=_____ COUNT(*)

_____,@grade=____ AVG(grade)___ FROM student_grade

        WHERE course_id=@cid

    IF (_________@grade IS NULL或@mans=0_______)

        PRINT N'该课程没有举行考试!'

    ELSE

        PRINT N'该课程有'+CONVERT(nvarchar(10),@mans)+

           N'名学生参加考试,平均成绩为'+CONVERT(nvarchar(10),@grade)+N'分。'

END

GO

2.完成下面的触发器的定义,当向学生情况表中插入记录时,触发器把该学生所在的班级人数增加1人。

CREATE TRIGGER t_1

   ON student_info

   FOR _____ INSERT _____

   AS

   BEGIN

       DECLARE @class_id char(6)

       SELECT @class_id = class_id

          FROM inserted

       UPDATE class_info

          SET _____ student_num = student_num + 1_______

          WHERE class_id = @class_id

   END

GO

  • 程序填空题(每空2分,共10分)

根据下面某学生管理数据库的表结构,完成下面的程序填空题。

student_info(stud_id,stud_name)

course_info(course_id,course_name)

student_grade(stud_id,course_id,grade)

1.补填下面的存储过程的定义,要求实现输入学生学号,根据该学生所选课程的平均成绩显示提示信息,即如果平均成绩在60分以上,显示“此学生综合成绩合格!”,否则显示“此学生综合成绩不合格!”。

CREATE PROCEDURE 判断学生成绩是否合格

___@sid ____ char(10)

AS

   BEGIN

    DECLARE @grade numeric(5,2)

    SELECT @grade=____ AVG(grade)______ FROM student_grade

       WHERE stud_id=@sid

    IF (_____@grade>=60_______)

       PRINT N'合格'

    ELSE

       PRINT N'不合格'

   END

GO

2.完成下面的触发器的定义,当向成绩表中插入记录时,触发器能判断若插入的成绩是否0-100,如果不符合则回滚插入操作。

CREATE TRIGGER t_2

   ON student_grade

   FOR INSERT

   AS

   BEGIN

       DECLARE @score int

       SELECT @score = score

          FROM _____ inserted _______

       IF(_______@score < 0  or  @score > 100_________)

       BEGIN

          PRINT N'分数不正确,不允许添加'

          ROLLBACK TRANSACTION

       END

       ELSE

          PRINT N'成功删除'

   END

GO

  • 程序填空题(每空2分,共10分)

有一个存储过程 PFind,在表TWord中查找任意一个单词的解释,并返回该值(FChinese对应的内容),请补填该存储过程的定义。

create procedure PFind

       __ as ___

       declare @i int

       declare @w nvarchar(10)

       set @i=0

       declare   Cur1 ___ cursor ___ for select 单词 from TWord order by 单词

       ___ open ___ Cur1

       L1:

           set @i=@i+1

           ___ fetch ___next from cur1  into @W

           ___ insert into ___TWords(序号,单词) values (@i,@W)

       if  @@fetch_status=0 goto l1

       close Cur1

       deallocate Cur1

  • 程序填空题(每空2分,共10分)

填写出下列触发器中缺少的关键字,使下面语句完整:

if update([lcostprice])

  update [b_drug_data] set [scostprice] = ((select [lcostprice] 

    from inserted

   ___ GROUP BY

___ [codno],[lcostprice],[scostprice]

  ___ HAVING ___ {b_drug_data.codno} = [inserted.codno])/

        (select [fsco] from [b_drug_data] 

    ____ GROUP BY

____ [codno],[fsco]

   ____ HAVING _____ [b_drug_data.codno] =

    (select [codno] from inserted group by [codno])))                 where [b_drug_data.codno] ____ IN _____ 

               (select [codno] from inserted)  

  • 程序填空题(每空2分,共10分)

根据下面某教学管理数据库的表结构,完成下面的程序填空题。

教师(职工号,姓名,学历,职称)

课程(课程号,课程名称,课程类别)

任课(职工号,课程号,周课时)

1.补填下面的用户自定义函数,使其被调用时,能根据调用程序提供的教师职工号返回该教师任课的课程号和周课时。

CREATE  FUNCTION 按教师职工号查询任课号和周课时(   @职工号   CHAR(9))

RETURNS________ TABLE _________

AS

RETURN(

SELECT 课程号,周课时

FROM教师 JOIN 任课 ON 教师.职工号 = 任课.职工号

WHERE_________任课.职工号=@职工号或教师.职工号=@职工号________

)

2.完成下面的触发器的定义,当向教师表中插入记录时,触发器能检查新添加的教师职称是否有效(助教,讲师,教授之一),如果无效则拒绝添加该数据。

CREATE TRIGGER 检查教师职称

ON 教师

AFTER INSERT

AS

IF(SELECT 职称 FROM________ INSERTED ________)

________ NOT IN _________ ('助教','讲师','教授')

BEGIN

PRINT ‘教师的职称无效,请核对!’

ROLLBACK TRANSCATION

END

  • 程序填空题(每空2分,共10分)

假设学生成绩管理系统中有如下表结构,完成下面的程序填空题。

student_grade(course_id,stud_id,grade,stud_credit, term, form)

说明:成绩表,每列的含义为课程编号、学生学号、成绩、获得的学分、考试所在的学期、考试形式。

1.补填下面的存储过程的定义,使其被调用时,能根据调用程序提供的课程编号返回该课程的考试人数和该课程的平均分。

Create proc proc_1

(@course_id char(8))

as

Begin

  declare @num int

  declare @avg     Decimal(6,2)   

  select @num=     Count(*)    ,@avg=     Avg(grade)   

  from student_grade

  where course_id=@course_id

End

2.完成下面的触发器的定义,当向学生成绩表中插入记录时, 触发器能判断若考试成绩超过100分时,则回滚插入操作。

CREATE TRIGGER trig_1

ON student_grade

AFTER INSERT

AS

DECLARE @score INT

SELECT @score = grade

From      Inserted    

IF @score > 100

        Rollback     

  • 程序填空题(每空2分,共10分)

根据上面程序阅读题给出的某学生选课成绩管理数据库(StuSelectCourse)的表结构,完成下面的程序填空题。

1.补填下面的存储过程(studystate)的定义,使其被调用时,能根据调用程序输出某一指定学号同学的姓名、系及所有选课课程的课程成绩(含课程名和课程成绩)。

USE StuSelectCourse

      IF EXISTS (SELECT name FROM  sysobjects WHERE name='studystate' and type=______‘P’_____)     

      DROP  PROCEDURE studystate  

    GO

create PROCEDURE studystate

@Ssno float

As

Select A.Sno,A.Sdept,C.Cname,B.Grade

From Student as A inner join SC as B ON A.Sno=B.Sno INNER JOIN Course as C ON

______ B. Cno =C. Cno _____    

Where ______ A. Sno =@Ssno _____   

go

2. 修改上面已创建的存储过程studystate,要求对此存储过程进行加密,并对此存储过程进行调用测试,测试的学号为20150000001。

(1)修改已创建的存储过程proc_studentinfo,要求对此存储过程进行加密,其他要求不变。

alter studystate

@Ssno float

______ With encryption _____   ---加密    

As

Select A.Sno,A.Sdept,C.Cname,B.Grade

From Student as A inner join SC as B ON A.Sno=B.Sno INNER JOIN Course as C ON

___________     B. Cno =C. Cno

Where __________    A. Sno =@Ssno

go

   ------------调用存储过程

Exec ______ studystate  20150000001_____   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值