1、- 1 -实验七 Transact-SQL 程序设计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_infoWHERE
2、 姓名 LIKE 张%SELECT stu_name观察显示的结果,与 student_info 表中数据进行比较, stu_name 赋值的是SELECT 结果集中的哪个数据?stu_name 的赋值是学生表中姓张的学生的名字(2) 定义 int 型局部变量grademax 、grademin 、gradesum ,在grade 表中查找最高分、最低分和总分,分别赋给 grademax、grademin 和gradesum,并显示。- 2 -(3) 使用 SET 命令将某个查询结果集记录数目赋值给 int 型局部变量row。(4) 以下代码在 curriculum 表中插入新记录: DECL
3、ARE intCId int,intErrorCode intINSERT INTO curriculum(课程编号,课程名称,学分)VALUES(0006,VB 程序设计,2) SELECT intCId=identity,intErrorCode=errorSELECT intCId,intErrorCode将该代码段连续执行两次,观察两次显示的信息及 curriculum 表中数据的变化,为什么前后两次执行时显示的信息会不同?- 3 -(5) 在 student_db 数据库的 student_info 表中,以 “性别”为分组条件,分别统计男生和女生人数。(6) 在 grade 表中,
4、使用适当函数找出 “高等数学”课程的最高分、最低分和平均分。- 4 -(7) 定义一个 datetime 型局部变量studate,以存储当前日期。计算student_info 表中的学生的年龄,并显示学生的姓名、年龄。(8) 运行以下代码,写出运行结果。DECLARE a int,b intSET a=168SET b=73SELECT a & b,a|b,ab(9) 在局部变量stu_id 中存储了学号值。编写代码查询学号为 0001 的学生的各科平均成绩,如果平均分60,则显示“你的成绩及格了,恭贺你 !” ,否则显示“你的成绩不及格” 。- 5 -(10) 运行以下代码段,写出运行的结
5、果。DECLARE counter intSET counter=1WHILE counter10BEGINSELECT counter 的值现在为: +CONVERT(CHAR(2),counter)SET counter=counter+1END- 6 -(11) 查询 grade 表。如果分数大于等于 90,显示 A; 如果分数大于等于 80 小于 90,显示 B;如果分数大于等于 70 小于 80,显示 C;如果分数大于等于 60 小于 70,显示 D; 其他显示 E。(12) 计算 grade 表的分数列的平均值。如果小于 80,则分数增加其值的5%;如果分数的最高值超过 95,则终
6、止该操作。- 7 -(13) 在 student_db 数据库中,使用游标查询数据。 声明一个 stu_cursor 游标,要求返回 student_info 表中性别为“男”的学生记录,且该游标允许前后滚动和修改。 打开 stu_cursor 游标。 获取并显示所有数据。 关闭该游标。- 8 -(14) 使用游标修改数据。 打开 stu_cursor 游标。 将姓马的男同学的出生日期的年份加 1。 关闭 stu_cursor 游标。(15) 声明游标变量stu_c,使之关联 stu_cursor 游标,利用stu_c 查询年龄在 69 月份出生的学生信息。(16) 使用系统存储过程 sp_c
7、ursor_list 显示在当前作用域内的游标及其属性。- 9 -3实验思考(1) Transact-SQL 语言的运算符主要有哪些?答:主要有以下六大类:算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符以及字符运算符。(2) 流程控制语句与其他编程语言提供的语句有何差别?答:流程控制语句是指那些用来控制程序执行和流程分支的命令,在 SQL SERVER 2000 中,流程控制语句主要用来控制 SQL 语句、语句块或者存储过程的执行流程。(3) 区分局部变量与全局变量的不同,思考全局变量的用处。答:不同点:局部变量的首字母为单个,使用 DECLARE 语句定义,仅存在于声明它的批处理,
8、存储过程或触发器中,处理结束后,存储在局部变量中的信息将丢失。全局变量由系统定义并维护,通过在名称前加符号区别于局部变量,通常被服务器用来跟踪服务器范围和特定会话期间的信息,不能显示的赋值或声明。全局变量不能由用户定义,也不能被应用程序用来在处理器之间交叉传递信息。全局变量的作用:全局变量通常存储一些 SQL SERVER 的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或是 Transact-SQL 命令执行后的状态值。(4) 什么函数能将字符串前和尾的空格去掉?答:有三个函数:ltrim(),rtrim(),trim()(5) 使用什么语句可以打开游标?打开成功后,游标指针指向结果集的什么位置?答:使用 OPEN cursor_name 语句打开游标。当游标打开成功后,游标指针指向结果集的第一行。