2016-数据库原理实验实验指导书(SQL Server 2008)

数据库原理实验指导书

① 使用系统存储过程sp_help查看grade表的外键信息。

② 在grade表中插入一条记录,学号为0100,课程编号为0001,分数为78。观察SQL Server会做何处理,为什么?如何解决所产生的问题?

③ 使用查询设计器删除grade表的外键fk_sid。 3.实验思考

(1)在SQL Server 2008中,可采用哪些方法实现数据完整性? (2)比较默认对象和默认约束的异同。

(3)可以使用SQL Server管理平台创建规则和默认值对象吗?

(4)在数据库中建立的规则不绑定到数据表的列上会起作用吗?为什么? (5)请说明唯一约束和主键约束之间的联系和区别。

17

数据库原理实验指导书

实验7 Transact-SQL程序设计

1.实验目的

(1)掌握Transact-SQL的数据类型、常量变量、表达式等的概念和使用方法。 (2)掌握程序中注释的基本概念和使用方法。 (3)掌握程序中的流程控制语句的使用方法。

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

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

(1)选择studentsdb数据库,打开新建查询编辑器,输入以下代码。

DECLARE @stu_name varchar(10) SELECT @stu_name=姓名 FROM student_info WHERE 姓名 LIKE '张%'

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

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

DECLARE @grademax int,@grademin int,@gradesum int

SELECT @grademax=max(分数),@grademin= min(分数),@gradesum=sum(分数) FROM grade

SELECT @grademax,@grademin,@gradesum

SELECT @stu_name

(3)使用SET命令将查询结果集记录数目赋值给int型局部变量@row。给下面代码中的划线处填上适当的内容,以完成上述操作。

DECLARE @rows

SET =(SELECT COUNT(*) FROM grade)

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

DECLARE @intCId int,@intErrorCode int

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

VALUES('0006','VB程序设计',2)

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

@rows --显示@rows的值

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

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

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

18

SELECT @intCId,@intErrorCode

数据库原理实验指导书

(7)定义一个datetime型局部变量@studate,以存储当前日期。计算student_info表中的学生的年龄,并显示学生的姓名、年龄。在以下代码的划线部分填入适当内容,以实现上述功能。

DECLARE datetime

SET @studate= --给@studate赋值为当前日期 SELECT 姓名, (@studate)-year(出生日期) AS 年龄

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

DECLARE @a int,@b int SET @a=168 SET @b=73

FROM student_info

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

IF ((SELECT AVG(分数) FROM grade WHERE 学号='0001')<60)

PRINT '你的成绩不及格'

ELSE PRINT '你的成绩及格了,恭贺你!!'

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

(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。在以下代码的划线部分填入适当内容完成上述功能。

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

19

数据库原理实验指导书

UPDATE grade

SET 分数=分数*1.05

if (SELECT MAX(分数) FROM grade)> BREAK ELSE END

(13)编写代码计算并显示@n=1+2+3+?+20。

(14)编写代码计算并显示1~100之间的所有完全平方数。例如,81=92,则称81为完全平方数。

(15)计算1~100以内的所有素数。

(16)在studentsdb数据库中,使用游标查询数据。 ① 打开查询设计器,声明一个stu_cursor游标,要求返回student_info表中性别为“男”的学生记录,且该游标允许前后滚动和修改。

② 打开stu_cursor游标。 ③ 获取并显示所有数据。 ④ 关闭该游标。

(17)使用游标修改数据。 ① 打开stu_cursor游标。

② 将姓马的男同学的出生日期的年份加1。 ③ 关闭stu_cursor游标。

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

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

3.实验思考

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

(2)流程控制语句与其他编程语言提供的语句有何差别? (3)区分局部变量与全局变量的不同,思考全局变量的用处。 (4)什么函数能将字符串前和尾的空格去掉?

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

20

联系客服:779662525#qq.com(#替换为@)