数据库技术与应用实验指导书-09信管专业

更新时间:2024-05-02 09:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1部分

数据库技术与应用实验指导

实验1实验2实验3实验4实验5实验6实验7实验8目录

SQL SERVER 2005的安装及管理工具的使用 ....................... 2 SQL SERVER数据库的管理 .................................................. 13 SQL SERVER数据表的管理 .................................................. 14 数据查询 ............................................................................... 17 索引和视图 ........................................................................... 19 数据完整性 ........................................................................... 21 TRANSACT-SQL程序设计 .................................................... 25 存储过程和触发器 ............................................................... 28

2

数据库技术与应用实验指导——SQL Server 2005

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

1.实验目的

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

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

(4)熟悉SQL Server 2005管理平台的界面及基本使用方法。 (5)了解数据库及其对象。 2.实验内容及步骤

㈠ SQL Server 2005的安装

(1)根据安装机器软硬件的要求,选择一个合适的版本,以下以开发版为例。

(2)将 SQL Server 2005 DVD 插入 DVD 驱动器。如果DVD驱动器的自动运行功能无法启动安装程序无法启动安装程序,请导航到 DVD 的根目录然后启动splash.hta。 (3)在自动运行的对话框中,单击“运行 SQL Server 安装向导”。

(4)在“最终用户许可协议”页上,阅读许可协议,再选中相应的复选框以接受许可条款和条件。接受许可协议后即可激活“下一步”按钮。若要继续,请单击“下一步” 若要结束安装程序,请单击“取消”。如下图:

数据库技术与应用实验指导——SQL Server 2005

(5)在“SQL Server 组件更新”页上,安装程序将安装 SQL Server 2005 的必需软件。有关组件要求的详细信息,请单击该页底部的“帮助”按钮。若要开始执行组件更新,请单击“安装”。更新完成之后若要继续,请单击“完成”。

3

(6)在 SQL Server 安装向导的“欢迎”页上,单击“下一步”以继续安装。

(7)在“系统配置检查 (SCC)”页上,将扫描安装计算机,以检查是否存在可能妨

4

数据库技术与应用实验指导——SQL Server 2005 碍安装程序的条件。

(8)在“注册信息”页上的“姓名”和“公司”文本框中,输入相应的信息。若要继续,请单击“下一步”。

数据库技术与应用实验指导——SQL Server 2005

(9)在“要安装的组件”页上,请选择要安装的组件。选择各个组件组时,“要安装的组件”窗格中会显示相应的说明。您可以选中任意一些复选框。建议全选。若要安装单个组件,请单击“高级”。否则,请单击“下一步”继续。

5

(10)在“实例名”页上,请为安装的软件选择默认实例或已命名的实例。计算机上必须没有默认实例,才可以安装新的默认实例。若要安装新的命名实例,请单击“命名实例”,然后在提供的空白处键入一个唯一的实例名。

6

数据库技术与应用实验指导——SQL Server 2005

(11)在“服务帐户”页上,为 SQL Server 服务帐户指定用户名、密码和域名。您可以对所有服务使用一个帐户。

数据库技术与应用实验指导——SQL Server 2005

(12)在“身份验证模式”页上,选择要用于 SQL Server 安装的身份验证模式。如果选择 Windows 身份验证,安装程序会创建一个 sa 帐户,该帐户在默认情况下是被禁用的。选择“混合模式身份验证”时,请输入并确认系统管理员 (sa) 登录名。建议选择混合模式,并输入安全的密码。

7

(13)如果选择 Reporting Services 作为要安装的功能,将显示“报表服务器安装选项”页。使用单选按钮选择是否使用默认值配置报表服务器。如果没有满足在默认配置中安装 Reporting Services 的要求,则必须选择“安装但不配置服务器”安装选项。若要继续安装,请单击“下一步”。

8

数据库技术与应用实验指导——SQL Server 2005

(14)在“错误报告”页上,可以清除复选框以禁用错误报告。有关错误报告功能的详细信息,请单击该页底部的“帮助”。若要继续安装,请单击“下一步”。

数据库技术与应用实验指导——SQL Server 2005

(15)在“准备安装”页上,查看要安装的 SQL Server 功能和组件的摘要。若要继续安装,请单击“安装”。

9

(16)在“安装进度”页上,可以在安装过程中监视安装进度。若要在安装期间查看某个组件的日志文件,请单击“安装进度”页上的产品或状态名称。

10

数据库技术与应用实验指导——SQL Server 2005

(17)在“完成 Microsoft SQL Server 安装向导”页上,可以通过单击此页上提供的链接查看安装摘要日志。若要退出 SQL Server 安装向导,请单击“完成”。

(18)如果提示您重新启动计算机,请立即重新启动。

(19)如果成功安装了SQL Server 2005,则在开始菜单中添加了如下程序和相应的服

数据库技术与应用实验指导——SQL Server 2005

务:

11

㈡ SQL Server 2005的环境介绍

(1) Analysis Services 提供“部署向导”,为用户提供将某个Analysis Services项目的输出部署到某个目标服务器的功能。

(2)配置工具 其子菜单中提供的配置管理器“SQL Server Configulation manager”用于查看和配置SQL Server的服务。

以下是SQL Server 2005 系统的7个服务。

右击某个服务名称,可以查看该服务的属性,并且可以启动、停止、暂停和重新启动相应的服务。也可以使用操作系统“我的电脑”-“管理”选项,在【计算机管理】窗口中查看和启动、停止、暂停和重新启动相应的服务。

(3)文档和教程 提供了SQL Server 2005的联机帮助和示例数据库概述。

12

数据库技术与应用实验指导——SQL Server 2005

(4)性能工具 子菜单提供了“SQL Server Profiler”和“数据库引擎优化顾问”用户数据库性能调试和优化工具。

(5)SQL Server Business Intelligence Development Studio 商务智能(BI)系统开发人员设计的集成开发环境,构建于Visual Studio 2005 技术之上,为商业智能系统开发人员提供了一个丰富、完整的专业开发平台,支持商业智能平台上的所有组件的调试、源代码控制以及脚本和代码的开发。

(6)SQL Server Management Studio 它将 SQL Server 早期版本中包含的企业管理器、查询分析器和分析管理器的功能组合到单一环境中,为不同层次的开发人员和管理员提供 SQL Server 访问能力。

3.实验思考

(1)SQL Server管理平台的作用是什么?如何进入SQL Server管理平台? (2)SQL Server配置管理器的作用是什么?如何进入SQL Server配置管理器? (3)用几种不同的方法实现注册数据库服务器与对象资源管理器的连接。 (4)查询设计器窗口的作用是什么?如何打开查询设计器窗口? (5)改变查询设计器的当前数据库使用什么方法?

数据库技术与应用实验指导——SQL Server 2005

13

实验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查看系统中的数据库信息。数据库的信息如下:主数据文件的逻辑名为student1,物理名为student1.mdf,存放路径为“e:\\db”,初始大小为5M,按5%比例增长;次数据文件逻辑名为student2,物理名为student2.ndf,存放路径为“e:\\db”,初始大小为4M,按1M增长,属于tt文件组;日志文件的逻辑名为student,物理名为student.ldf,存放路径为“e:\\db”,初始大小为2M,按1M增长,最大可增长到10M。

(5)使用Transact-SQL语句ALTER DATABASE修改studb数据库的设置,指定主数据文件大小为6MB,最大文件大小为20MB,自动递增大小为1MB。

(6)使用Transact-SQL语句为studb数据库增加一个日志文件,命名为student4.ldf,大小为5MB,最大文件大小为10MB。

(7)使用Transact-SQL语句将数据库studb从SQL SERVER中分离。 (8)使用Transact-SQL语句将数据库studb附加到SQL SERVER中。 (9)使用Transact-SQL语句将studb数据库的名称更改为student_db。 (10)使用Transact-SQL语句DROP DATABASE删除student_db数据库。 (11)使用SQL Server管理平台删除studentsdb数据库。

3.实验思考

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

14

数据库技术与应用实验指导——SQL Server 2005

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

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

(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

数据库技术与应用实验指导——SQL Server 2005

15

图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的数据

16

数据库技术与应用实验指导——SQL Server 2005

图1-7 grade的数据

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

(8)使用Transact-SQL语句INSERT INTO...VALUES向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表添加一个名为“备注”的数据列,其数据类型为VARCHAR(20)。

3.实验思考

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

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

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

数据库技术与应用实验指导——SQL Server 2005

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

注意:请同学们自行保存相关代码,以备下次实验使用,实验完成后,要及时撰写实验报告。

17

实验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表,按性别顺序列出学生的学号、姓名、性别、出生日期及家庭住址,性别相同的按学号由小到大排序。

18

数据库技术与应用实验指导——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)查询每个学生的所选课程的成绩,并列出学号生成分组汇总行(总成绩)和明细

数据库技术与应用实验指导——SQL Server 2005

行(各课成绩)。

19

使用SELECT语句的COMPUTE选项。

(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删除索引

20

数据库技术与应用实验指导——SQL Server 2005

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

(9)在studentsdb数据库中,以student_info表为基础,使用SQL Server管理平台建立名为v_stu_i的视图,使视图显示学生姓名、性别、家庭住址。

(10)在studentsdb数据库中,使用Transact-SQL语句CREATE VIEW建立一个名为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)能否在视图上创建索引?

注意:请同学们自行保存相关代码,以备下次实验使用,实验完成后,要及时撰写实验报告。

数据库技术与应用实验指导——SQL Server 2005

21

实验6 数据完整性

1.实验目的

(1)掌握Transact-SQL语句(CREATE RULE、DROP RULE)创建和删除规则的方法。 (2)掌握系统存储过程sp_bindrule、sp_unbindrule绑定和解除绑定规则的操作方法,

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

(3)掌握Transact-SQL语句(CREATE DEFAULT、DROP DEFAULT)创建和删除默认对象的方法。

(4)掌握系统存储过程sp_bindefault、sp_unbindefault绑定和解除绑定默认对象的操作 方法,以及sp_helptext查询默认对象信息。

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

2.实验内容及步骤

(1)为studentsdb数据库创建一个规则,限制所输入的数据为7位0~9的数字。 ① 复制student_info表命名为stu_phone,在stu_phone表中插入一列,列名为“电话号码”。完成以下代码实现该操作。

SELECT * INTO stu_phone FROM student_info

stu_phone表结构如图1-10所示。

ALTER TABLE stu_phone ADD CHAR(7) NULL

图1-10 stu_phone表结构

② 创建一个规则phone_rule,限制所输入的数据为7位0~9的数字。实现该规则的代码为

③ 使用系统存储过程sp_bindrule将phone_rule规则绑定到stu_phone表的“电话号码”列上。实现该操作的代码为

④ 输入以下代码,进行一次插入操作:

产生以下出错信息:

INSERT INTO stu_phone(学号,姓名,电话号码) VALUES('0009','王国强','1234yyy')

消息513,级别16,状态0,第1 行

列的插入或更新与先前的CREATE RULE 语句所指定的规则发生冲突。该语句已终止。冲突发生于 数据库'studentsdb',表'dbo.stu_phone',列'电话号码'。

22

数据库技术与应用实验指导——SQL Server 2005

试分析: 为什么会产生该出错信息?如果要实现插入操作,应修改INSERT INTO语句中的哪个值?phone_rule规则能否对其他操作(如DELETE)进行规则检查?

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

stu_s_rule(stusex_rule更名后规则名)是否仍然绑定在stu_phone表的“性别”列上?应如何操作才能删除它?

语句已终止。

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

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

--创建日期型默认对象df_date CREATE df_date AS '2009-4-12' GO

--创建字符型默认对象df_char CREATE DEFAULT df_char 'unknown' GO

--创建货币型默认对象df_money CREATE DEFAULT AS $100 GO

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

CREATE TABLE stu_fee

(学号 char(10) NOT NULL, 姓名 char(8) NOT NULL, 学费 money,

交费日期 datetime,

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

图1-11 stu_fee的数据结构

电话号码 char(7))

③ 使用系统存储过程sp_bindefault将默认对象df_money、df_date、df_char分别绑定在stu_fee表的“学费”、“交费日期”、“电话号码”列上。

数据库技术与应用实验指导——SQL Server 2005

df_money,'stu_fee.学费'

GO

sp_bindefault ,'stu_fee.交费日期' GO

sp_bindefault df_char,'stu_fee.电话号码'

23

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

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

INSERT INTO stu_fee(学号,姓名,学费) VALUES('0001','张卫民',$120) INSERT INTO stu_fee(学号,姓名,学费,交费日期) VALUES('0001','马东',$110,'2006-5-12')

GO

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

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

'stu_fee.电话号码' DEFAULT 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

家庭住址

24

数据库技术与应用实验指导——SQL Server 2005

0010 0011 0012

李梅 王强 王强

1983-8-5 1988-9-10 1989-6-3

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

③ 使用ALTER TABLE语句的DROP CONSTRAINT参数项在查询设计器中删除为stu_con表所建的约束。

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

(9)在查询设计器中,为studentsdb数据库的grade表添加外键约束(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)请说明唯一约束和主键约束之间的联系和区别。

注意:请同学们自行保存相关代码,以备下次实验使用,实验完成后,要及时撰写实验报告。

数据库技术与应用实验指导——SQL Server 2005

25

实验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 '张%'

观察显示的结果,与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 SELECT @intCId,@intErrorCode

@rows --显示@rows的值

26

数据库技术与应用实验指导——SQL Server 2005

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

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

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

数据库技术与应用实验指导——SQL Server 2005

分数>=90 THEN 'A'

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

27

(12)计算grade表的分数列的平均值。如果小于80,则分数增加其值的5%;如果分数的最高值超过95,则终止该操作。在以下代码划线处填入适当的内容以完成上述功能。

WHILE (SELECT (分数) FROM grade)<80 BEGIN

UPDATE grade

SET 分数=分数*1.05

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

FROM grade

(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)区分局部变量与全局变量的不同,思考全局变量的用处。

28

数据库技术与应用实验指导——SQL Server 2005

(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创建触发器的方法和步骤。

(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,执行时通过输入姓名,可以查询该姓名

数据库技术与应用实验指导——SQL Server 2005

对应的学生的各科成绩。

CREATE PROCEDURE stu_info @name varchar(40) AS

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

FROM student_info a INNER JOIN grade ta ON a.学号= ta.学号

29

使用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,当任意输入一个学生的姓名时,将从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

WHERE 姓名= @name

30

数据库技术与应用实验指导——SQL Server 2005

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

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

执行以上代码,查看studentsdb数据库中是否有stu2表,展开stu2,查看其触发器项中是否有stu_str触发器。

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

运行以上代码,查看stu2表的变化情况,为什么插入记录的学号值发生了改变? (8)为grade表建立一个名为insert_g_tr 的INSERT触发器,当用户向grade表中插入记录时,如果插入的是在curriculum表中没有的课程编号,则提示用户不能插入记录,否则提示记录插入成功。在进行插入测试时,分别输入以下数据:

学号 课程编号 分数

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(学号,姓名) VALUES('0009','李青') INSERT INTO stu2(学号,姓名,性别) VALUES('0001','张主','女')

COMMIT TRANSACTION

SET IMPLICIT_TRANSACTIONS ON

GO

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

GO

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

注意:请同学们自行保存相关代码,以备下次实验使用,实验完成后,要及时撰写实验报告。

本文来源:https://www.bwwdw.com/article/wp4g.html

Top