文档库 最新最全的文档下载
当前位置:文档库 › SQL SERVER2005上机实验指导

SQL SERVER2005上机实验指导

实验1 SQL Server 2005的安装及管理工具的使用

1.实验目的

(1)了解SQL Server 2005安装对软、硬件的要求,掌握安装方法。

(2)了解SQL Server 2005的注册和配置方法。

(3)了解SQL Server 2005包含的主要组件及其功能。

(4)熟悉SQL Server 2005管理平台的界面及基本使用方法。

(5)了解SQL Server 2005数据库及其对象。

(6)了解在SQL Server2005管理平台中执行SQL语句的方法。

2.实验内容及步骤

(1)根据软、硬件环境的要求,安装SQL Server 2005(在安装过程中,请选择安装示例数据库AdventureWorks)。

(2)通过选择“开始”→“程序”→Microsoft SQL Server 2005→“配置工具”→SQL Server Configuration Manager菜单项,打开“SQL Server配置管理器”窗口,在界面左边的树目录中选择“SQL Server 2005 服务”,在右边的项列表区中选择SQL Server。并且通过该窗口“启动服务”和“停止服务”图标来启动和停止SQL Server服务。

(3)通过“开始”→“程序”→Microsoft SQL Server 2005→SQL Server Management Studio菜单项打开SQL Server 2005管理平台。

(4)在SQL Server 2005管理平台中,注册服务器。查看本地已注册的SQL Server。查找网络上另一台计算机,并且注册该机上的SQL Server,注册时使用“Windows身份认证”或“SQL Server身份认证”的连接方式。

(5)从SQL Server管理平台中删除网络SQL Server服务器。

(6)在SQL Server管理平台的对象资源管理器中打开本地服务器的属性对话框,查看以下信息:产品名称、主机操作系统、产品的版本、操作平台、主机内存等。

(7)利用SQL Server管理平台访问系统自带的AdventureWorks数据库。

①以系统管理员身份登录到SQL Server管理平台。

②在SQL Server管理平台的对象资源管理器窗口中找到AdventureWorks 数据库并展开,查看该数据库的所有对象,如表、视图、存储过程、默认和规则等。

③选择AdventureWorks数据库的“表”选项,在右窗格中将列出AdventureWorks数据库的所有表,选择雇员表HumanResources.Employee,右击鼠标,弹出快捷菜单,从中选择“打开表”菜单项,打开Employee表,查看其内容。

2

数据库技术与应用实践教程——SQL Server 2005

(8)利用SQL Server管理平台的查询设计器窗口访问AdventureWorks数据库的表。

①在SQL Server管理平台的对象资源管理器窗口中,选择AdventureWorks

数据库结点,单击鼠标右键,在弹出的快捷菜单中选择“新建查询”命令,或者选择数据库后,单击工具栏的“新建查询”命令,打开查询设计器窗口。

②在查询设计器窗口中,输入以下代码:

SELECT *

FROM HumanResources.Employee a

WHERE a.Gender='M'

ORDER BY a.Title

③选择SQL Server管理平台的“查询”→“分析”菜单项,或者单击常用

工具栏上“验证SQL语法”按钮,查询设计器将对输入的代码进行语法分析,并由消息窗格给出分析结果报告。

④选择SQL Server管理平台的“查询”→“执行”菜单项,或者单击常用

工具栏上“执行SQL”按钮,SQL Server将编译窗口中的代码,并在结果窗格中显示查询结果,如图1-1所示。

图1-1 查询设计器窗口

3.实验思考

(1)SQL Server管理平台的作用是什么?如何进入SQL Server管理平台?

(2)SQL Server配置管理器的作用是什么?如何进入SQL Server配置管理器?

(3)用几种不同的方法实现注册数据库服务器与对象资源管理器的连接。

(4)查询设计器窗口的作用是什么?如何打开查询设计器窗口?

(5)改变查询设计器的当前数据库使用什么方法?

3

第1部分错误!文档中没有指定样式的文字。

实验2 SQL Server数据库的管理

1.实验目的

(1)了解SQL Server 数据库的逻辑结构和物理结构的特点。

(2)掌握使用SQL Server管理平台对数据库进行管理的方法。

(3)掌握使用Transact-SQL语句对数据库进行管理的方法。

2.实验内容及步骤

(1)在SQL Server管理平台中创建数据库。

①运行SQL Server管理平台,在管理平台的对象资源管理器中展开服务器。

②右击“数据库”项,在快捷菜单中选择“新建数据库”菜单项。在新建

数据库对话框的数据库名称文本框中输入学生管理数据库名studentsdb,单击“确定”按钮。

(2)选择studentsdb数据库,在其快捷菜单中选择“属性”菜单项,查看“常规”、“文件”、“文件组”、“选项”、“权限”和“扩展属性”等页面。

(3)打开studentsdb数据库的“属性”对话框,在“文件”选项卡中的数据

库文件列表中修改studentsdb数据文件的“分配的空间”大小为2MB。指定“最

大文件大小”为5MB。修改studentsdb数据库的日志文件的大小在每次填满时

自动递增5%。

(4)单击“新建查询”打开查询设计器窗口,在查询设计器窗口中使用Transact-SQL语句CREATE DATABASE创建studb数据库。然后通过系统存储

过程sp_helpdb查看系统中的数据库信息。

(5)在查询设计器中使用Transact-SQL语句ALTER DATABASE修改studb

数据库的设置,指定数据文件大小为5MB,最大文件大小为20MB,自动递增

大小为1MB。

(6)在查询设计器中为studb数据库增加一个日志文件,命名为studb_Log2,

大小为5MB,最大文件大小为10MB。

(7)使用SQL Server管理平台将studb数据库的名称更改为student_db。

(8)使用Transact-SQL语句DROP DATABASE删除student_db数据库。

(9)在SQL Server管理平台中删除studentsdb数据库。

3.实验思考

(1)数据库中的日志文件是否属于某个文件组?

(2)数据库中的主数据文件一定属于主文件组吗?

(3)数据文件和日志文件可以在同一个文件组吗?为什么?

4

数据库技术与应用实践教程——SQL Server 2005

(4)删除了数据库,其数据文件和日志文件是否已经删除?是否任何人都可以删除数据库?删除了的数据库还有可能恢复吗?

(5)能够删除系统数据库吗?

实验3 SQL Server数据表的管理

1.实验目的

(1)掌握使用SQL Server管理平台和Transact-SQL语句CREATE TABLE 和ALTER TABLE创建和修改表的方法。

(2)掌握在SQL Server管理平台中对表进行插入、修改和删除数据操作的方法。

(3)掌握使用Transact-SQL语句对表进行插入、修改和删除数据操作的方法。

(4)了解SQL Server的常用数据类型。

2.实验内容及步骤

(1)启动SQL Server管理平台,在对象资源管理器中展开studentsdb数据库文件夹。

(2)在studentsdb数据库中包含有数据表student_info、curriculum、grade,这些表的数据结构如图1-2至图1-4所示。

图1-2 学生基本情况表student_info

图1-3 课程信息表curriculum

5

第1部分错误!文档中没有指定样式的文字。

图1-4 学生成绩表grade

(3)在SQL Server管理平台中创建student_info、curriculum表。

(4)在SQL Server管理平台中,将student_info表的学号列设置为主键,非空。

(5)使用Transact-SQL语句CREATE TABLE在studentsdb数据库中创建grade表。

(6)student_info、curriculum、grade表中的数据如图1-5至图1-7所示。

图1-5 student_info的数据

图1-6 curriculum的数据

6

数据库技术与应用实践教程——SQL Server 2005

图1-7 grade的数据

(7)在SQL Server管理平台中为student_info、curriculum、grade表添加数据。

(8)使用Transact-SQL语句INSERT INTO...V ALUES向studentsdb数据库的grade表插入数据:学号为0004,课程编号为0001,分数为80。

(9)使用Transact-SQL语句ALTER TABLE修改curriculum表的“课程编号”列,使之为非空。

(10)使用Transact-SQL语句ALTER TABLE修改grade表的“分数”列,使其数据类型为real。

(11)使用Transact-SQL语句ALTER TABLE修改student_info表的“姓名”

列,使其列名为“学生姓名”,数据类型为varchar(10),非空。

(12)分别使用SQL Server管理平台和Transact-SQL语句DELETE删除studentsdb数据库的grade表中学号为0004的成绩记录。

(13)使用Transact-SQL语句UPDATE修改studentsdb数据库的grade表中学号为0003、课程编号为0005的分数为90的成绩记录。

(14)使用Transact-SQL语句ALTER...ADD为studentsdb数据库的grade表添加一个名为“备注”的数据列,其数据类型为V ARCHAR(20)。

3.实验思考

(1)使用Transact-SQL语句删除在studentsdb数据库的grade表添加的“备注”数据列。

(2)在SQL Server管理平台中,studentsdb数据库的student_info表的数据输入时,如果输入相同学号的记录将出现什么现象?怎样避免该情况的发生?

7

第1部分错误!文档中没有指定样式的文字。

(3)已经打开的表能删除吗?

(4)在SQL Server 2005中能将数据表中的字段名和其数据类型同时改变吗?

实验4 数据查询

1.实验目的

(1)掌握使用Transact-SQL的SELECT语句进行基本查询的方法。

(2)掌握使用SELECT语句进行条件查询的方法。

(3)掌握SELECT语句的GROUP BY、ORDER BY以及UNION子句的作

用和使用方法。

(4)掌握嵌套查询的方法。

(5)掌握连接查询的操作方法。

2.实验内容及步骤

(1)在studentsdb数据库中,使用下列SQL语句将输出什么?

①SELECT COUNT(*) FROM grade

②SELECT SUBSTRING(姓名,1,2) FROM student_info

③SELECT UPPER('kelly')

④SELECT Replicate('kelly',3)

⑤SELECT SQRT(分数) FROM grade WHERE 分数>=85

⑥SELECT 2,3,POWER(2,3)

⑦SELECT YEAR(GETDATE()),MONTH(GETDATE()),DAY(GETDATE())

(2)在studentsdb数据库中使用SELECT语句进行基本查询。

①在student_info表中,查询每个学生的学号、姓名、出生日期信息。

②查询学号为0002 的学生的姓名和家庭住址。

③找出所有男同学的学号和姓名。

(3)使用SELECT语句进行条件查询。

①在grade表中查找分数在80~90范围内的学生的学号和分数。

②在grade表中查询课程编号为0003的学生的平均分。

③在grade表中查询学习各门课程的人数。

④将学生按出生日期由大到小排序。

⑤查询所有姓“张”的学生的学号和姓名。

(4)对student_info表,按性别顺序列出学生的学号、姓名、性别、出生日

期及家庭住址,性别相同的按学号由小到大排序。

8

数据库技术与应用实践教程——SQL Server 2005

(5)使用GROUP BY查询子句列出各个学生的平均成绩。

(6)使用UNION运算符将student_info表中姓“张”的学生的学号、姓名与curriculum表的课程编号、课程名称返回在一个表中,且列名为u_编号、u_名称,如图1-8所示。

图1-8 联合查询结果集

(7)嵌套查询。

①在student_info表中查找与“刘卫平”性别相同的所有学生的姓名、出

生日期。

②使用IN子查询查找所修课程编号为0002、0005的学生学号、姓名、性

别。

③列出学号为0001的学生的分数比0002号的学生的最低分数高的课程编

号和分数。

④列出学号为0001的学生的分数比学号为0002的学生的最高成绩还要高

的课程编号和分数。

(8)连接查询。

①查询分数在80~90范围内的学生的学号、姓名、分数。

②查询学习“C语言程序设计”课程的学生的学号、姓名、分数。

③查询所有男同学的选课情况,要求列出学号、姓名、课程名称、分数。

④查询每个学生的所选课程的最高成绩,要求列出学号、姓名、课程编号、

分数。

⑤查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程

的学生的总成绩为空。

⑥为grade表添加数据行:学号为0004、课程编号为0006、分数为76。

查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,curriculum 表中没有的课程列值为空。

3.实验思考

(1)查询所有没有选修课程的学生信息,返回结果包括学号、姓名、性别。

(2)在student_info表和grade表之间实现交叉连接。

(3)查询每个学生的所选课程的成绩,并列出学号生成分组汇总行(总成绩)和明细行(各课成绩)。

9

第1部分错误!文档中没有指定样式的文字。

(4)在查询语句中SELECT、FROM和WHERE选项分别实现什么运算?

(5)在查询的FROM子句中实现表与表之间的连接有哪几种方式?对应的

关键字分别是什么?

实验5 索引和视图

1.实验目的

(1)掌握使用SQL Server管理平台和Transact-SQL语句CREATE INDEX

创建索引的方法。

(2)掌握使用SQL Server管理平台查看索引的方法。

(3)掌握使用SQL Server管理平台和Transact-SQL语句DROP INDEX删除

索引的方法。

(4)掌握使用SQL Server管理平台和Transact-SQL语句CREATE VIEW创

建视图的用法。

(5)了解索引和视图更名的系统存储过程sp_rename的用法。

(6)掌握使用Transact-SQL语句ALTER VIEW修改视图的方法。

(7)了解删除视图的Transact-SQL语句DROP VIEW的用法。

2.实验内容及步骤

(1)分别使用SQL Server管理平台和Transact-SQL语句为studentsdb数据

库的student_info表和curriculum表创建主键索引。

(2)使用SQL Server管理平台按curriculum表的课程编号列创建唯一性索引。

(3)分别使用SQL Server管理平台和Transact-SQL语句为studentsdb数据

库的grade表的“分数”字段创建一个非聚集索引,命名为grade_index。

(4)为studentsdb数据库的grade表的“学号”和“课程编号”字段创建一

个复合唯一索引,命名为grade_id_c_ind。

(5)分别使用SQL Server管理平台和系统存储过程sp_helpindex查看grade

表和student_info表上的索引信息。

(6)使用SQL Server管理平台对grade表创建一个聚集索引和唯一索引。

(7)使用系统存储过程sp_rename将索引grade_index更名为grade_ind。

(8)分别使用SQL Server管理平台和Transact-SQL语句DROP INDEX删除

索引grade_ind。再次使用系统存储过程sp_helpindex查看grade表上的索引信息。

(9)在studentsdb数据库中,以student_info表为基础,使用SQL Server管

理平台建立名为v_stu_i的视图,使视图显示学生姓名、性别、家庭住址。

(10)在studentsdb数据库中,使用Transact-SQL语句CREATE VIEW建立

10

数据库技术与应用实践教程——SQL Server 2005

一个名为v_stu_c的视图,显示学生的学号、姓名、所学课程的课程编号,并利用视图查询学号为0003的学生情况。

(11)基于student_info表、curriculum表和grade表,建立一个名为v_stu_g 的视图,视图中具有所有学生的学号、姓名、课程名称、分数。使用视图v_stu_g 查询学号为0001的学生的所有课程与成绩,如图1-9所示。

图1-9 学号为0001的学生的视图信息

(12)分别使用SQL Server管理平台和Transact-SQL语句修改视图v_stu_c,使之显示学号、姓名、每个学生所学课程数目。

(13)使用Transact-SQL语句ALTER VIEW修改视图v_stu_i,使其具有列名学号、姓名、性别。

(14)使用系统存储过程sp_rename将视图v_stu_i更名为v_stu_info。

(15)利用视图v_stu_i为student_info表添加一行数据:学号为0015、姓名为陈婷、性别为女。

(16)利用视图v_stu_i删除学号为0015的学生记录。

(17)利用视图v_stu_g修改姓名为刘卫平的学生的高等数学的分数为84。

(18)使用Transact-SQL语句DROP VIEW删除视图v_stu_c和v_stu_g。

3.实验思考

(1)是否可以通过视图v_stu_g修改grade表中学号列数据?

(2)比较视图和基表操作表中数据的异同。

(3)可更新视图必须满足哪些条件?

(4)什么是索引?SQL Server 2005中有两种形式的索引:聚集索引和非聚集索引,简单叙述它们的区别?

(5)能否在视图上创建索引?

实验6 数据完整性

1.实验目的

(1)掌握Transact-SQL语句(CREATE RULE、DROP RULE)创建和删除规则的方法。

(2)掌握系统存储过程sp_bindrule、sp_unbindrule绑定和解除绑定规则的

11

第1部分错误!文档中没有指定样式的文字。

操作方法,以及sp_helptext查询规则信息、sp_rename更名规则的方法。

(3)掌握Transact-SQL语句(CREATE DEFAULT、DROP DEFAULT)创建

和删除默认对象的方法。

(4)掌握系统存储过程sp_bindefault、sp_unbindefault绑定和解除绑定默认对

象的操作方法,以及sp_helptext查询默认对象信息。

(5)掌握SQL Server管理平台和Transact-SQL语句(CREA TE TABLE、AL TER TABLE)定义和删除约束的方法,并了解约束的类型。

2.实验内容及步骤

(1)为studentsdb数据库中student_info表的创建一个规则,限制“电话号

码”列所输入的数据为7位0~9的数字。

(2)创建一个规则stusex_rule,将其绑定到stu_phone表的“性别”列上,

保证输入的性别值只能是“男”或“女”。

(3)使用系统存储过程sp_help查询stusex_rule规则列表,使用sp_helptext

查询stusex_rule规则的文本,使用sp_rename将stusex_rule规则更名为

stu_s_rule。

(4)删除stu_s_rule规则。

(5)在studentdb数据库中,建立日期、货币和字符等数据类型的默认值对

象。

①在查询设计器中,完成以下代码,创建默认对象df_date、df_char、

df_money。

②输入以下代码,在studentsdb数据库中创建stu_fee数据表。

CREATE TABLE stu_fee

(学号char(10) NOT NULL,

姓名char(8) NOT NULL,

学费money,

交费日期datetime,

电话号码char(7))

表stu_fee的数据结构如图1-11所示。

图1-11 stu_fee的数据结构

③使用系统存储过程sp_bindefault将默认对象df_money、df_date、df_char

分别绑定在stu_fee表的“学费”、“交费日期”、“电话号码”列上。

④输入以下代码,在stu_fee表进行插入操作:

INSERT INTO stu_fee(学号,姓名) V ALUES('0001','刘卫平')

INSERT INTO stu_fee(学号,姓名,学费) V ALUES('0001','张卫民',$120)

12

数据库技术与应用实践教程——SQL Server 2005

INSERT INTO stu_fee(学号,姓名,学费,交费日期)

V ALUES('0001','马东',$110,'2006-5-12')

分析stu_fee表中插入记录的各列的值是什么?

⑤完成以下代码,解除默认对象df_char的绑定,并删除默认对象。按同

样的方式,删除默认对象df_date、df_money。

(6)为student_info表添加一列,命名为“院系”,创建一个默认值对象stu_d_df,将其绑定到student_info表的“院系”列上,使其默认值为“信息工程学院院”,对student_info表进行插入操作,操作完成后,删除该默认对象。

(7)在studentsdb数据库中用CREATE TABLE语句创建表stu_con,并同时创建约束。

①创建表的同时创建约束。表结构如图1-12所示。

图1-12 要创建的表的结构

约束要求如下:

?将学号设置为主键(PRIMARY KEY),主键名为pk_sid。

?为姓名添加唯一约束(UNIQUE),约束名为uk_name。

?为性别添加默认约束(DEFAULT),默认名称为df_sex,其值为“男”。

?为出生日期添加属性值约束(CHECK),约束名为ck_bday,其检查条件

为:出生日期>'1988-1-1'。

②在stu_con表中插入如表1-1所示的数据记录。

表1-1 在stu_con表中插入的数据

学号姓名性别出生日期家庭住址

0009 张小东1989-4-6

0010 李梅女1983-8-5

0011 王强1988-9-10

0012 王强1989-6-3

分析各约束在插入记录时所起的作用,查看插入记录后表中数据与所插入的数据是否一致?

③使用ALTER TABLE语句的DROP CONSTRAINT参数项在查询设计器

中删除为stu_con表所建的约束。

(8)用SQL Server管理平台完成实验内容7的所有设置。

(9)在查询设计器中,为studentsdb数据库的grade表添加外键约束

13

第1部分错误!文档中没有指定样式的文字。(FOREIGN KEY),要求将“学号”设置为外键,参照表为student_info,外键

名称为fk_sid。

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

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

③使用查询设计器删除grade表的外键fk_sid。

3.实验思考

(1)在SQL Server 2005中,可采用哪些方法实现数据完整性?

(2)比较默认对象和默认约束的异同。

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

(4)在数据库中建立的规则不绑定到数据表的列上会起作用吗?为什么?

(5)请说明唯一约束和主键约束之间的联系和区别。

实验7 Transact-SQL程序设计

1.实验目的

(1)掌握Transact-SQL的数据类型、常量变量、表达式等的概念和使用方

法。

(2)掌握程序中注释的基本概念和使用方法。

(3)掌握程序中的流程控制语句的使用方法。

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

(5)掌握游标的概念和声明方法,以及使用游标进行数据的查询、修改、

删除操作等。

2.实验内容及步骤

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

DECLARE @stu_name varchar(10)

SELECT @stu_name=姓名

FROM student_info

WHERE 姓名LIKE '张%'

SELECT @stu_name

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

(2)定义int型局部变量@grademax、@grademin、@gradesum,在grade表

中查找最高分、最低分和总分,分别赋给@grademax、@grademin和@gradesum,

14

数据库技术与应用实践教程——SQL Server 2005

并显示。

(3)使用SET命令将查询结果集记录数目赋值给int型局部变量@row。

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

DECLARE @intCId int,@intErrorCode int

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

V ALUES('0006','VB程序设计',2)

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

SELECT @intCId,@intErrorCode

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

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

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

(7)定义一个datetime型局部变量@studate,以存储当前日期。计算student_info表中的学生的年龄,并显示学生的姓名、年龄。

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

DECLARE @a int,@b int

SET @a=168

SET @b=73

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

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

(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。

(12)计算grade表的分数列的平均值。如果小于80,则分数增加其值的5%;

如果分数的最高值超过95,则终止该操作。

15

第1部分错误!文档中没有指定样式的文字。

(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)使用什么语句可以打开游标?打开成功后,游标指针指向结果集的什

么位置?

实验8 存储过程和触发器

1.实验目的

(1)掌握通过SQL Server管理平台和Transact-SQL语句CREATE PROCEDURE创建存储过程的方法和步骤。

(2)掌握使用Transact-SQL语句EXECUTE执行存储过程的方法。

(3)掌握通过SQL Server管理平台和Transact-SQL语句ALTER PROCEDURE修改存储过程的方法。

(4)掌握通过SQL Server管理平台和Transact-SQL语句DROP PROCEDURE

删除存储过程的方法。

(5)掌握通过SQL Server管理平台和Transact-SQL语句CREATE TRIGGER

16

数据库技术与应用实践教程——SQL Server 2005

创建触发器的方法和步骤。

(6)掌握引发触发器的方法。

(7)掌握使用SQL Server管理平台或Transact-SQL语句修改和删除触发器。

(8)掌握事务、命名事务的创建方法,了解不同类型的事务的处理情况。

2.实验内容及步骤

(1)在查询设计器中输入以下代码,创建一个利用流控制语句的存储过程letters_print,该存储过程能够显示26个小写字母。

CREATE PROCEDURE letters_print

AS

DECLARE @count int

SET @count=0

WHILE @count<26

BEGIN

PRINT CHAR(ASCII('a')+ @count)

SET @count=@count +1

END

单击查询分析器的“执行查询”按钮,查看studentsdb数据库的存储过程是否有letters_print。

使用EXECUTE命令执行letters_print存储过程。

(2)输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。

CREATE PROCEDURE stu_info @name varchar(40)

AS

SELECT a.学号,姓名,课程编号,分数

FROM student_info a INNER JOIN grade ta

ON a.学号= ta.学号

WHERE 姓名= @name

使用EXECUTE命令执行存储过程stu_info,其参数值为“马东”。

如果存储过程stu_info执行时没有提供参数,要求能按默认值查询(设姓名为“刘卫平”),如何修改该过程的定义?

(3)使用studentsdb数据库中的student_info表、curriculum表、grade表。

①创建一个存储过程stu_grade,查询学号为0001的学生的姓名、课程名

称、分数。

②执行存储过程stu_grade,查询0001学生的姓名、课程名称、分数。

③使用系统存储过程sp_rename将存储过程stu_grade更名为stu_g。

(4)使用student_info表、curriculum表、grade表。

①创建一个带参数的存储过程stu_g_p,当任意输入一个学生的姓名时,

17

第1部分错误!文档中没有指定样式的文字。

将从3个表中返回该学生的学号、选修的课程名称和课程成绩。

②执行存储过程stu_g_p,查询“刘卫平”的学号、选修课程和课程成绩。

③使用系统存储过程sp_helptext,查看存储过程stu_g_p的文本信息。

(5)使用student_info表。

①创建一个加密的存储过程stu_en,查询所有男学生的信息。

②执行存储过程stu_en,查看返回学生的情况。

③使用Transact-SQL语句DROP PROCEDURE删除存储过程stu_en。

(6)使用grade表。

①创建一个存储过程stu_g_r,当输入一个学生的学号时,通过返回输出参

数获取该学生各门课程的平均成绩。

②执行存储过程stu_g_r,输入学号0002。

③显示0002号学生的平均成绩。

(7)输入以下代码,复制student_info表命名为stu2,为stu2表创建一个触

发器stu_tr,当stu2表插入一条记录时,为该记录生成一个学号,该学号为学

号列数据的最大值加1。

--复制student_info表命名为stu2

SELECT * INTO stu2 FROM student_info

GO

--为stu2表创建一个INSERT型触发器stu_tr

CREATE TRIGGER stu_tr

ON stu2 FOR INSERT

AS

DECLARE @max char(4)

SET @max=(SELECT MAX(学号) FROM stu2)

SET @max=@max+1

UPDATE stu2 SET 学号=REPLICATE('0',4-len(@max))+@max

FROM stu2 INNER JOIN inserted on stu2.学号=inserted.学号

执行以上代码,查看studentsdb数据库中是否有stu2表,展开stu2,查看其

触发器项中是否有stu_str触发器。

在查询设计器的编辑窗口输入以下代码:

INSERT INTO stu2(学号,姓名,性别) V ALUES('0001','张主','女')

运行以上代码,查看stu2表的变化情况,为什么插入记录的学号值发生了

改变?

(8)为grade表建立一个名为insert_g_tr 的INSERT触发器,当用户向grade

表中插入记录时,如果插入的是在curriculum表中没有的课程编号,则提示用

户不能插入记录,否则提示记录插入成功。在进行插入测试时,分别输入以下

数据:

学号课程编号分数

18

数据库技术与应用实践教程——SQL Server 2005

0004 0003 76

0005 0007 69

观察插入数据时的运行情况,说明为什么?

(9)为curriculum表创建一个名为del_c_tr的DELETE触发器,该触发器的作用是禁止删除curriculum表中的记录。

(10)为student_info表创建一个名为update_s_tr的UPDATE触发器,该触发器的作用是禁止更新student_info表中的“姓名”字段的内容。

(11)使用Transact-SQL语句DROP TRIGGER删除update_s_tr触发器。

(12)为student_info表建立删除触发器del_s_tr,要求当student_info表的记录被删除后,grade表中相应的记录也能自动删除。

(13)在studentsdb数据库中,执行以下事务处理过程,说明这些事务属于哪一种事务类型(隐性事务、显性事务或自动式事务)。

BEGIN TRANSACTION

INSERT INTO student_info(学号,姓名) V ALUES('0009','李青')

COMMIT TRANSACTION

SET IMPLICIT_TRANSACTIONS ON

GO

INSERT INTO grade(学号,课程编号) V ALUES('0005','0007')

GO

IF ((SELECT count(*) FROM curriculum WHERE 课程编号='0007')=0)

相关文档