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