您好,欢迎来到品趣旅游知识分享网。
搜索
您的当前位置:首页数据库实验六_张东站

数据库实验六_张东站

来源:品趣旅游知识分享网
实验六 过程语言

一、实验目的:

通过本次实验,要求掌握变量定义,流程控制,存储过程,存储函数,游标等内容。

二、实验内容:

1)变量的声明和使用,掌握@@ERROR、@@ROWCOUNT、@@IDENTITY等全局变量的使用。

2)使用BEGIN…END、IF…ELSE…、 WHILE…CONTINUE…BREAK…、CASE等流程控制语句。

3)使用存储过程。

4)使用系统函数和用户自定义函数。 5)使用游标处理数据。

三、实验步骤:

1) 用T-SQL语言完成1+2+3……+100,并使用@@ERROR判断是否执行成功,如果成功

则输出值,否则打印执行失败。使用WHILE语句实现。

2)更新STUDENTS表中sid为8763210的学生的email为ddff@sina.com,并通过@@ROWCOUNT判断是否有数据被更新,如果没有则打印警告。

USE School UPDATE …

IF @@ROWCOUNT = 0

PRINT ‘警告!没有数据被更新’

3)新建一个带IDENTITY属性列的表,往其中插入数据,使用@@IDENTITY查看标识列信息。 CREATE TABLE 表名 (属性列 类型 IDENTITY(1,1)----定义该列为自增长1的IDENTITY属性列

…)

INSERT INTO 表名(----注意此处不要加IDENTITY属性列) VALUES(----同样的不要加IDENTITY属性列对应值)

SECLECT @@IDENTITY

4)使用IF…ELSE…语句,查询STUDENTS表中学号为800007595的学生,如果学生存在,则输出学生的各科成绩,否则打印查无此人。

提示:USE School IF(EXISTS (…)) BEGIN … END ELSE

PRINT …

5)使用CASE语句,查询学号为800007595所选择的课程号为10044的成绩,如果为80分或以上,打印优秀,如果在60—80分之间则打印及格,否则打印不及格。

6)

 存储过程

使用T-SQL命令CREATE PROC语句可创建存储过程,基本语法格式如下: CREATE PROC[UDURE] <>

( [ {@参数 数据类型} [ = 默认值] [ OUTPUT ] ] [ , …n] ) [ WITH {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}] AS […n] 执行已存在的存储过程使用语句格式如下: [EXECUTE] 存储过程名 [输入参数值] 执行创建的存储过程,通过输出参数分析执行结果。  函数

用户自定义函数分为:标量值函数、内联表值函数、多语句表值函数。

创建多语句内联表值函数,要求根据课程名称查询所有选修些课程的学生姓名和分数。 提示:CREATE FUNCTION <函数名> (<参数>)

RETURNS @tb_scores TABLE(<返回表属性>) AS BEGIN

INSERT @tb_scores SELECT….. RETURN END

http://msdn.microsoft.com/en-us/library/ms186755.aspx  游标

不同于查询语句,查询语句只能参整个结果集进行同一种操作,而游标允许定位在结果集的特定行,从结果集的当前位置检索一行或多行,支持对结果集中当前位置的行进行数据修改,为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持,提供脚本、存储过程和触发器中用于访问结果集中数据的T-SQL语句。

使用游标必须按照下面顺序:声明游标,打开游标,读取游标中的数据,关闭游标,释放游标。

游标声明:DECLARE <游标名> [INSENSITIVE] [SCROLL] CURSOR FOR [FOR { READ ONLY | UPDATE [ OF <表名列表>]}] 打开游标:OPEN { { [GLOBAL] <游标名>} | <游标变量名> } 提取数据:FETCH

[ [ NEXT | PRIOR | FIRSR | LAST | ABSOLUTE { n | @整型变量 } | RELATIVE { n | @整型变量}] FROM ]

{ { [GLOBAL] <游标名> } | @游标变量名 } [ INTO @变量名列表 ]

关闭游标:CLOSE { { [GLOBAL] <游标名> } | <游标变量名> }

释放游标:DEALLOCATE { { [GLOBAL] <游标名> } | <游标变量名> }

http://msdn.microsoft.com/zh-cn/library/ms180169.aspx  实验内容

创建一个存储过程,该存储过程实现的功能:查找出选修database课程并且期末成绩为不及格(score<60)的学生,现张老师法外开恩,决定给这些不及格但是分数大于50分的同学加上五分平时分,执行存储过程后,要求显示出加完分后,仍然挂科的同学。

具体要求:

1、 显示格式为:<课程名/学生姓名/加分前成绩/加分后成绩>,要求用函数实现该显示

功能;

2、 加分使用游标实现;

3、 存储过程输入参数为:<课程名,加分数>。

use School

create function printInfor( @cname varchar(50), @sname varchar(20), @be_score int, )

returns nvarchar(max)

@af_score int

as begin

create proc addscore(@cname char(50),@add_score int) as begin

declare cursor1 cursor for select

sname,cname,score,(score+@add_score) as af_score from students,courses,choices

where students.sid = choices.sid and courses.cid = choices.cid and choices.score < 60 and courses.cname = @cname open cursor1

declare @ccname varchar(50) declare @sname varchar(20) declare @be_score int declare @af_score int

fetch next from cursor1 into @sname,@ccname,@be_score,@af_score while(@@FETCH_STATUS = 0) begin

update choices set score = @af_score

where sid in (select sid from students as s where

and cid in (select cid from courses as c where c.cname=@ccname) if(@af_score < 60) begin

print

dbo.printInfor(@ccname,@sname,@be_score,@af_score) end

fetch next from cursor1 into @sname,@ccname,@be_score,@af_score end

close cursor1 deallocate cursor1

declare @string nvarchar(max) set @string = '<'

set @string = @string + RTRIM(@cname) + '/' set @string = @string + RTRIM(@sname) + '/'

set @string = @string + CONVERT(nvarchar,@be_score) + '/' set @string = @string + CONVERT(nvarchar,@af_score) set @string = @string + '>' return @string

end

s.sname=@sname)

end

exec addscore 'database',5

实验总结:

数据库的过程语言比较像c,理解不难,主要还是记住这门语言的规则就好了。通过本次实验,我掌握了变量定义,流程控制,存储过程,存储函数,游标等内容。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- pqdy.cn 版权所有 赣ICP备2024042791号-6

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务