南昌大学计算机数据库实验七 Transact和游标实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验七Transact-SQL程序设计(2学时)

学号:6100410235 姓名:郑俊班级:计科103班实验日期:2012-12-06 1.实验目的

(1)掌握Transact-SQL的数据类型、常量变量、表达式等的概念和使用方法。

(2)掌握程序中注释的基本概念和使用方法。

(3)掌握程序中的流程控制语句的使用方法。

(4)掌握SQL Server 2005中常用函数的用法。

(5)掌握游标的概念和声明方法,以及使用游标进行数据的查询、修改、删除操作等。

2.实验内容

(1)选择student_db数据库,输入以下T-SQL代码。

DECLARE @stu_name varchar(10)

SELECT @stu_name=姓名

FROM student_info

WHERE 姓名LIKE '张%'

SELECT @stu_name

观察显示的结果,与student_info表中数据进行比较,@stu_name赋值的是SELECT结果集中的哪个数据?

(2)定义int型局部变量@grademax、@grademin、@gradesum,在grade 表中查找最高分、最低分和总分,分别赋给@grademax、@grademin和@gradesum,并显示。

(3)使用SET命令将某个查询结果集记录数目赋值给int型局部变量@row。

(4)以下代码在curriculum表中插入新记录:

DECLARE @intCId int,@intErrorCode int

INSERT INTO curriculum(课程编号,课程名称,学分)

V ALUES('0006','VB程序设计',2)

SELECT @intCId=@@identity,@intErrorCode=@@error

SELECT @intCId,@intErrorCode

将该代码段连续执行两次,观察两次显示的信息及curriculum表中数据的变化,为什么前后两次执行时显示的信息会不同?

第一次:

第二次:

(5)在student_db数据库的student_info表中,以“性别”为分组条件,分别统计男生和女生人数。

(6)在grade表中,使用适当函数找出“高等数学”课程的最高分、最低分和平均分。

(7)定义一个datetime型局部变量@studate,以存储当前日期。计算student_info表中的学生的年龄,并显示学生的姓名、年龄。

(8)运行以下代码,写出运行结果。

DECLARE @a int,@b int

SET @a=168

SET @b=73

SELECT @a & @b,@a|@b,@a^@b

(9)在局部变量@stu_id中存储了学号值。编写代码查询学号为0001的学生的各科平均成绩,如果平均分 60,则显示“你的成绩及格了,恭贺你!!”,否则显示“你的成绩不及格”。

(10)运行以下代码段,写出运行的结果。

DECLARE @counter int

SET @counter=1

WHILE @counter<10

BEGIN

SELECT '@counter的值现在为:'+CONVERT(CHAR(2),@counter)

SET @counter=@counter+1

END

(11)查询grade表。如果分数大于等于90,显示A;如果分数大于等于

80小于90,显示B;如果分数大于等于70小于80,显示C;如果分数大于等于60小于70,显示D;其他显示E。

(12)计算grade表的分数列的平均值。如果小于80,则分数增加其值的5%;如果分数的最高值超过95,则终止该操作。

(13)在student_db数据库中,使用游标查询数据。

①声明一个stu_cursor游标,要求返回student_info表中性别为“男”的学生记录,且该游标允许前后滚动和修改。

②打开stu_cursor游标。

③获取并显示所有数据。

④关闭该游标。

(14)使用游标修改数据。

①打开stu_cursor游标。

②将姓马的男同学的出生日期的年份加1。

③关闭stu_cursor游标。

(15)声明游标变量@stu_c,使之关联stu_cursor游标,利用@stu_c查询年龄在6~9月份出生的学生信息。

declare@stu_c cursor

set@stu_c=stu_cursor

declare@stu_id char(4),@stu_name char(8),@stu_sex char(2),@stu_age int,@stu_depa nchar(1),@stu_bdate datetime

open@stu_c

fetch next from@stu_c

into@stu_id,@stu_name,@stu_sex,@stu_depa,@stu_age,@stu_bdate

while@@FETCH_STA TUS=0

begin

select@stu_id as sno,@stu_name as sname,@stu_sex as sex,@stu_depa as sdept,@stu_age as

sage,

@stu_bdate as birthday

from student_info

where month(@stu_bdate)>=6 and month(@stu_bdate)<=9

fetch next from@stu_c into@stu_id,@stu_name,@stu_sex,@stu_depa,@stu_age,@stu_bdate end

close@stu_c

deallocate@stu_c

(16)使用系统存储过程sp_cursor_list显示在当前作用域内的游标及其属性。

DECLARE@Report CURSOR

EXEC master.dbo.sp_cursor_list@cursor_return=@Report OUTPUT,

@cursor_scope=2

FETCH NEXT from@Report

CLOSE@Report

DEALLOCATE@Report

3.实验思考

(1)Transact-SQL语言的运算符主要有哪些?

答:算术运算符,赋值运算符,位运算符,比较运算符,逻辑运算符,字符串串联运算符。

(2)流程控制语句与其他编程语言提供的语句有何差别?

答: BEGIN…END也是流程控制语句需要用到的最基本关键字,用于将多个语句划分成逻辑上的一部分。其实可以直接理解成Delphi的begin...end 或者C类语言的{},用于按块(block)顺次执行多条语句

IF..ELSE关键字实现了非此既彼的逻辑。和高级语言中的IF..ELSE具有完全一样的使用方法

在T-SQL的流程控制语句中,循环语句只有WHILE循环,并没有传统高级语言的FOR和SWITCH循环。WHILE除了被用于流程控制语句的循环之外,还经常被用于游标之中。

WHILE关键字和高级语言中的WHILE关键字几乎完全一样。WHILE循环中可以利用BREAK和CONTINUE关键字对循环进行控制。

相关文档
最新文档