.                              -
XX学院
学 生 实 验 报 告 册
实验课程名称:数据库技术与应用 实验项目名称:Transact-SQL程序设计 实验类型(打√):(基础
☑、综合、   设计    )
院系:       教育学院      专业班级:  11教育技术学    XX:  学号:
指导老师:     林育曼
.                                                                                 - 优质文档-
XX学院教务处编制
一、实验预习报告内容
          预习日期:   2013年  11 月 30日 实验预习报告内容原则上应包含实验目的、实验所用主要仪器药品、实验原理与公式、 实验预习疑问等项目。 一、实验目的 1、掌握Transact-SQL的数据类型、常量变量、表达式等的概念和使用方法。 2、掌握程序中注释的基本概念和使用方法。 3、掌握程序中的流程控制语句的使用方法。 4、掌握SQL Server 2005中常用函数的用法。 5、掌握游标的概念和声明方法,以及使用游标进行数据的查询、修改、删除操作等。  二、实验准备 1、了解程序中注释的语法格式。 2、了解程序中的流程控制语句:IF ELSE、CASE、WHILE等流程控制语句。 3、了解系统提供的常用数学函数、日期和时间函数、字符串函数和数据类型转换函数的用法。 4、了解函数的使用方法。 5、了解游标的使用方法。   三、实验内容  1、完成上机实验指导中的实验7,并回答实验中的实验思考。 具体实验要求看上机实验指导书的19~22页。(选做)          实验预习评分: 二、实验原始(数据)记录
实验时间:2013年12月3日(星期 二 第 五六 节)
如有实验数据表格,学生在实验预习时应画好实验数据表格,供实验时填写数据(本页如 不够,可另附相同规格的纸X)。                           实验同组人:
三、实验报告内容
              2013年 12月 4日 实验报告内容原则上应包含主要实验步骤、实验数据计算(实验操作)结果、实验结果 (疑问)分析等项目。 实施内容: 一、根据实验要求完成实验:(写明步骤和截图) 0. 创建studentsdb数据库及其相应表,并录入数据。 启动查询分析器,运行下面的代码即可。 创建数据库代码    1. 在查询分析器中,选择studentsdb 数据库,输入以下代码。 DECLAREstunamevarchar(10) SELECTstuname=XX FORM studentinfo WHERE XXLIKE‘X%’SELECTstuname   观察显示的结果,与studentinfo表中数据进行比较,stuname赋值的是SELECT结 果集中的哪个数据       赋值的是结果集中的姓X的数据 2. 定义int型局部变量grademax、grademin、gradesum,在grade表中查找最 高分、最低分和总分,分别赋给grademax、grademin和gradesum,并显示。 DECLAREgrademax int,gradesum,int SELECTgrademax =max(分数),grademin=min(分数),gradesum=sum(分数) FROM grade SELECTgrademax ,grademin,gradesum    3. 使用SET命令将查询的结果数目赋值给int型局部变量row。给下面代码中的划 线处填上适当的内容,以完成上述操作。 DECLARErow  SET=(SELECTCOUNT(*)FROM grade) rows —显示rows 的值  4. 以下代码在curriculum表中插入新纪录: DECLAREintCIdint,intErrorCodeint INSERTINTOcurriculum(课程编号,课程名称,学分) VALUES(’0006’,’VB程序设计’,2) SELECTintCId=identity,intErrorCode=error SELECTintCId,intErrorCode    将该代码段连续执行两次,观察两次显示的信息及curriculum表中数据的变化,为什么 前后两次执行时显示的信息会不同?     两次显示的结果都是一样呀,网上的答案也是这样的,更不清楚为什么要问为什么两次执 行时显示的信息会不同。
因为我不小心执行了四次,所以就出现了四个VB(估计是不是考的主键的唯一性?不能重 复插入?但估计是之前的代码疏忽了设置主键?) 5. 在studentsdb 数据库的studentinfo表中,以“性别”为分组条件,分别统计男生和 女生人数。  6. 在grade表中,使用适当函数找出“高等数学”课程的最高分、最低分和平均分。     结果检验无误   7. 定义一个datetime型局部变量student,以存储当前日期。计算studentinfo表 中的学生的年龄,并显示学生的XX、年龄。在以下代码的划线部分填入适当内容,以实现 上述功能。   DECLAREdatetime SETstudent=  —给student赋值为当前日期 SELECTXX,(student)-year(出生日期)AS年龄 FROM studentinfo  8.  运行以下代码,写出运行结果。  DECLAREaint,b int SETa=168 SETb =73 SELECTa&b,a|b ,a^b     9.     在局部变量stuid中存储了学号值。编写代码查询学号为0001 的学生的各科平 均成绩,如果平均分>=60 则显示“你的成绩及格了,恭喜你!!”,否则显示“你的成绩不及 格”。 IF((SELECTAVG(分数)FROM gradewhere学号=‘0001’)<60) PRINT‘你的成绩不及格’ ELSE PRINT‘你的成绩及格了,恭喜你!!’    10.  运行以下代码段,写出运行的结果。 DECLAREcounterint SETcounter=1 WHILEcounter<10 BEGIN SELECT‘counter的值现在为:’+CONVERT(CHAR(2),counter) SETcounter=counter+1 END     11.  查询grade表。如果分数大于等于90,显示A;如果分数大于等于80小于90,显 示B;如果分数大于等于70 小于80,显示C;如果分数大于等于60小于70,显示D;其 他显示E。在以下代码的划线部分填入适当内容完成上述功能 SELECT学号,分数,等级= CASE 分数>=90 THEN ‘A’ WHEN分数>=80 AND 分数<90‘B’WHEN分数>=70 AND 分数<80  THEN  ‘C’WHEN分数>=60 AND 分数<70  THEN  ELSE  ‘E’ END FROM grade    12.  计算grade表的分数列的平均值。如果小于80,则分数增加其值的5%;如果分数 的最高值超过95,则终止该操作。在以下代码划线处填入适当的内容以完成上述功能。  WHILE (SELECT(分数)FROM grade)<80 BEGIN UPDATEgrade SET分数= 分数*1.05 If(SELECTMAX(分数)FROM grade)>BREAK ELSE END    13.  编写代码计算并显示n=1+2+3+...+20。  14.  编写代码计算并显示1~100 之间的所有完全平方数。例如,81 =92,则称81 为完 全平方数。     15.  计算1~100 以内的所有的素数。    16.  在studentsdb 数据库中,使用游标查询数据。 (1) 打开查询分析器,声明一个stucursor游标,要求返回studentinfo表中性别 为“男”的学生记录,且该游标允许前后滚动和修改。    (2)  (3) 打开stucursor游标。 获取并显示所有数据。  (4)  关闭该游标。   17.使用游标修改数据。  (1) 打开stucursor游标。          (2) 将姓马的男同学的出生日期的年份加1。  因为说什么局部变量不能是text 变量,然后为了做这题,我就把备注数据类型改成  varchar(50)了才做的这题 (3) 关闭stucursor。    18.  声明游标变量stuc,使之关联stucursor游标,利用stuc查询年龄在6~9 月份出生的学生信息。  19.使用系统存储过程spcursorlist显示在当前作用域内的游标及其属性。                     四、实验思考 1. 使用游标对数据库的表进行删除和修改等操作。 UPDATE语句的格式为:  UPDATE table_name  SET {列名=表达式}[,…n]  WHERE CURRENT OF cursor_name   DELETE语句的格式为:  DELETE FROM table_name  WHERE CURRENT OF cursor_name   CURRENT OF cursor_name:表示当前游标指针所指的当前行数据。CURRENT OF 只能在UPDATE和DELETE语句中使用。   2.  流程控制语句与其他编程语言提供的语句有何差别? 不同的变成语句是不同的,但是流程语句就是思路很清晰的那种,可以很轻松就转换成其他语言的流程图或者程序了。  3.  区分局部变量与全局变量的不同,思考全局变量的用处。 答:不同点:局部变量的首字母为单个,使用DECLARE语句定义,仅存在于声明它的批处理、存储过程或触发器中。处理结束后,存储在局部变量中的信息将丢失。 全局变量由系统定义并维护,通过在名称前加符号区别于局部变量,通常被服务器用来跟踪服务器X围和特定会话期间的信息,不能显示的赋值或声明。 全局变量不能由用户定义,也不能被应用程序用来在处理器之间交叉传递信息。全局变量的作用,全局变量通常存储一些SQL Server的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是Transact-SQL命令执行后的状态值。        实验报告评分: 注:1、如个别实验的实验报告内容多,实验报告册页面不够写,或有识图、画图要求的,学生应根据实验指导老师要求另附相同规格的纸X并粘贴在相应的“实验报告册”中。  2、实验报告册属教行材料,院系(中心)应按有关规定归档保管。