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

更新时间:2023-09-30 20:07:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验七 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(课程编号,课程名称,学分)

VALUES('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_STATUS=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关键字对循环进行控制。

(3) 区分局部变量与全局变量的不同,思考全局变量的用处。

答:全局变量是在所有函数之外声明的变量,局部变量则是在函数体内声明的变量。全局变量放在内存的全程数据区,局部变量在栈上申请。全局数据区分为两部分全局数据区和静态数据区,静态数据区专门存放static变量。static的全局变量只在该文件范围内可见,不能用extern声明为外部变量。

(4) 什么函数能将字符串前和尾的空格去掉?

答:MySQL 清除字符串首尾空格函数有三个: ltrim(), rtrim(), trim(),

(5) 使用什么语句可以打开游标?打开成功后,游标指针指向结果集的什么位置?

答:使用OPEN cursor_name语句打开游标。当游标打开成功后,游标指针指向结果集的第一行

本文来源:https://www.bwwdw.com/article/a02d.html

Top