第一范文网 - 专业文章范例文档资料分享平台

SQL Server 2005习题答案

来源:用户分享 时间:2025/8/5 15:06:17 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

(2) 动态游标 (3) 只进游标

(4) 由键集驱动游标

根据T-SQL服务器游标在结果集中移动方式,SQL Server 2005将游标分为两种: (1) 滚动游标 (2) 前向游标

根据T-SQL服务器游标结果集是否允许修改,SQL Server 2005将游标分为两种: (1) 只读游标 (2) 只写游标

9. 创建游标可以用哪两种方式?这两种方式创建的游标一样吗?创建完游标是否可以马上读取数据?

答:声明游标有两种方式:标准方式和T-SQL扩展方式。这两种方式创建的游标不一样。创建完游标是不可以马上读取数据,还必须打开游标。

10. 利用标准方式声明一个游标,查询课程表中的课程编号和课程名信息,并读取数据。 答:DECLARE 课程 CURSOR

FOR

SELECT 课程号,课程名 FROM 课程表 GO

OPEN 课程 GO

FETCH NEXT FROM 课程 GO

11. 利用T-SQL扩展方式声明一个游标,查询学生表中的学号、姓名、性别和出生日期信息,并读取数据。要求:

(1) 读取最后一条记录。FETCH LAST FROM 学生 (2) 读取第一条记录。FETCH FIRST FROM 学生

(3) 读取第4条记录。FETCH ABSOLUTE 4 FROM 学生

(4) 读取当前记录指针位置后第2条记录。FETCH RELATIVE 2 FROM 学生 (5) 读取当前记录指针位置前第2条记录。FETCH RELATIVE -2 FROM 学生 答:

DECLARE 学生 CURSOR DYNAMIC FOR

SELECT 学号,姓名,性别,出生日期 FROM 学生表 GO

OPEN 学生 GO

21

FETCH LAST FROM 学生 FETCH FIRST FROM 学生

FETCH ABSOLUTE 4 FROM 学生 FETCH RELATIVE 2 FROM 学生 FETCH RELATIVE -2 FROM 学生 GO

补充1、编写一个程序,采用游标方式输出所有课程的平均分。 USE xscj GO

--声明变量

DECLARE @c_name varchar(8),@s_avg float --声明游标

DECLARE st_cursor CURSOR

FOR SELECT 课程表.课程名,AVG(成绩表.分数) FROM 课程表,成绩表

WHERE 课程表.课程号=成绩表.课程号 AND 成绩表.分数 IS NOT NULL GROUP BY 课程表.课程名 --打开游标

OPEN st_cursor --提取第一行数据

FETCH NEXT FROM st_cursor INTO @c_name,@s_avg --打印表标题

PRINT '课程 平均分' PRINT '-----------------'

WHILE @@FETCH_STATUS = 0 BEGIN

--打印一行数据

PRINT @c_name+' '+CAST(@s_avg AS char(10)) --提取下一行数据

FETCH NEXT FROM st_cursor INTO @c_name,@s_avg END

--关闭游标

CLOSE st_cursor --释放游标

DEALLOCATE st_cursor GO

补充2、编写一个程序,采用游标方式输出所有学号、课程号和成绩等级。 USE xscj GO 22

--声明变量

DECLARE @no1 char(5),@no2 char(6),@fs char(2) --声明游标

DECLARE fs_cursor CURSOR FOR SELECT 学号,课程号, CASE

WHEN 分数>=90 THEN 'A' WHEN 分数>=80 THEN 'B' WHEN 分数>=70 THEN 'C' WHEN 分数>=60 THEN 'D' WHEN 分数<60 THEN 'E' END

FROM 成绩表 WHERE 分数 IS NOT NULL ORDER BY 学号 --打开游标

OPEN fs_cursor --提取第一行数据

FETCH NEXT FROM fs_cursor INTO @no1,@no2,@fs --打印表标题

PRINT '学号 课程号 等级' PRINT '-----------------'

WHILE @@FETCH_STATUS = 0 BEGIN

--打印一行数据

PRINT @no1+' '+@no2+' '+@fs --提取下一行数据

FETCH NEXT FROM fs_cursor INTO @no1,@no2,@fs END

--关闭游标

CLOSE fs_cursor --释放游标

DEALLOCATE fs_cursor GO

10.3 习题

1. 存储过程和触发器的作用是什么?使用它们有什么好处

答:存储过程(Stored Procedure)是一组完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行存

23

储过程。

触发器是一种特殊类型的存储过程,它不同于前面介绍过的存储过程,主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。

使用存储过程和触发器可以提高系统查询效率,增强数据的完整性。 2. SQL Server 2005中存储过程的类型有哪些?

答:在SQL Server 2005中存储过程分为三类:系统提供的存储过程、用户自定义存储过程和扩展存储过程。

3. 在有些情况下,为什么需要重新编译存储过程?

答:在执行诸如添加索引或更改索引列中的数据等操作更改了数据库时,应重新编译访问数据库表的原始查询计划以对其重新优化。在SQL Server 2005重新启动后,第一次运行存储过程时自动执行此优化。当存储过程使用的基础表发生变化时,也会自动执行此优化。但如果添加了存储过程可能从中受益的新索引,将不会自动执行优化,直到下一次SQL Server重新启动并再运行该存储过程时为止。在这种情况下,强制在下次执行存储过程时对其重新编译会很有用。

4. SQL Server 2005中触发器的类别有哪些?

答:SQL Server 包括两大类触发器:DML触发器和DDL触发器。 5. 创建存储过程和触发器的SQL语句是什么? 答:创建存储过程:

CREATE PROCEDURE [schema_name.] procedure_name [ { @parameter [ type_schema_name. ] data_type }

[ VARYING ] [ = default ] [ OUT | OUTPUT ] ] [ ,...n ] [ WITH ENCRYPTION ] AS { [;][ ...n ] }[;]

::= { [ BEGIN ] statements [ END ] } 创建触发器:

CREATE TRIGGER [ schema_name . ]trigger_name ON { table | view }

[ WITH [ ,...n ] ] { FOR | AFTER | INSTEAD OF }

{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ WITH APPEND ]

[ NOT FOR REPLICATION ]

AS { sql_statement [ ; ] [ ...n ] | EXTERNAL NAME }

补充:1、创建一个AFTER触发器,要求实现以下功能:在成绩表上创建一个插入、更新类型的触发器TR_ScoreCheck,当在成绩表字段中插入或修改考试分数后,触发该触发器,检查分数是否在0-100之间。

USE XSCJ GO

CREATE TRIGGER TR_ScoreCheck ON 成绩表 24

搜索更多关于: SQL Server 2005习题答案 的文档
SQL Server 2005习题答案.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c07qdz48e8x6u75f0arbi_6.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top