2024年1月10日发(作者:)

基于SQL SERVER的数据库技术

实验指导

计算机科学系软件教研室

实验一 数据库和表的管理

实验目的

 掌握SQL SERVER常用组件的使用

 学会数据库的建立和使用

 学会表的建立和使用

实验内容

1.SQL SERVER常用组件的使用

2.使用企业管理器和T-SQL语句来建立数据库

3.使用企业管理器和T-SQL语句建立表

实验步骤

1、实例一

本实例讲解企业管理器的使用

(1)在“开始”|“程序”|“Microsoft SQL Server”中选择“企业管理器”,打开企业管理器。界面如图所示。

- 1 -

图1.1 企业管理器主界面

(2)双击“控制台根目录”下的“Microsoft SQL Servers”,出现“SQL Server组”,在组中选择相应的SQL Server注册服务器。如下图所示。

图1.2 SQL SERVER服务器注册

(3)双击“数据库”可以打开本服务器中的相应数据库,之后可以对数据库进行建立、更改、- 2 -

删除和对数据库中的表进行建立、更改和删除操作。结果如下图所示。

图1.3 建立数据库

(4)在企业管理器中可以对服务器的属性进行相应的设置。右键单击服务器“SYSSYS(WindowNT)”选择属性,出现下图所示属性对话框。通过该对话框,可以对服务器和数据库进行适当的设置。

- 3 -

图1.4 SQL SERVER属性窗口

(5)企业管理器也可以设置数据库的属性,右键单击某一数据库,选择“属性”,则会出现数据库属性对话框。设置该对话框可以设置数据库的属性。

- 4 -

图1.5 数据库属性窗口

2、实例二

本实例讲解查询分析器的使用

(1)在“开始”|“程序”|“Microsoft SQL Server”中选择“查询分析器”,打开查询分析器。界面如图所示。

- 5 -

图1.6 SQL 查询分析器窗口

(2)如果用户已经设置了密码,则会出现“连接SQL Server”对话框,输入相应的用户名和密码即可进入查询分析器窗口。对话框窗口如下图所示。

图1.7 新建查询窗口

(3)进入查询分析器窗口后,即可使用查询分析器的各项功能,如使用T-SQL语言查询数据库中的相关信息等。例如,在查询窗口中输入以下内容。

USE pubs

- 6 -

Select type,pub_id,price

From titles

Where type= 'business'

Order by type,pub_id,price

Compute sum(price) By type,pub_id

Compute sum(price) By type

按“F5”或查询分析器窗口中的来执行查询语句,结果如下图所示。

图1.8 查询分析器的使用

(3)选择“查询”菜单下的“显示执行计划”和“显示客户统计”选项。接着按“F5”执行查询。此时在文本编辑器的下半部分的4个标签页上分别显示查询的结果网格、执行计划、统计及其相关信息。

- 7 -

图1.9 查询分析器执行计划显示窗口

图1.10 查询分析器统计显示窗口

图1.11 查询分析器消息显示窗口

3、实例三

本实例讲解服务管理器的使用

(1)企业管理器和查询分析器在使用前必须保证已经启用服务管理器,服务管理器是主要服务的提供者。它可以提供三种服务:SQL Server服务、MDTC服务和SQL Server服务。服务管理器启动会在通知栏上显示出来,如下图。

图1.12 SQL SERVER服务管理器的启动

(2)打开服务管理器需要在“开始”|“程序”|“Microsoft SQL Server”中选择“服务管理器”,出现服务管理器窗口,如下图所示。

- 8 -

图1.13 SQL SERVER服务管理器的使用

接下来可以设置服务管理器的启动、暂停和停止服务,也可以选择相应的服务器,和相应服务器提供的服务。

(3)在企业管理器的SQL Server组中单击右键后从快捷菜单中选择“连接”|“断开”选项,即可启动和断开服务器。

(4)配置服务器的属性对于管理SQL Server来说很重要,可以使用企业管理器进行配置。在企业管理器中在要进行配置的服务器上右击后,从快捷菜单中选择“属性”选项,即可对服务器属性进行设置,此设置对话框在前面已经讲过,这里不再赘述。

4、实例四

本实例主要讲解使用企业管理器创建一个数据库。

①要求数据库名为MYDB,数据库中包含一个数据文件,逻辑文件名为MY_DB_DATA,操作系统文件名为MY_DB_,文件的初始容量为5MB,最大容量为15MB,文件容量递增值为2MB。

②事务日志文件的逻辑文件名为MY_DB_LOG,操作系统文件名为MY_DB_,文件的初始容量为3MB,最大容量为10MB,文件容量递增为1MB。

③创建完成后要对其进行修改,添加一个数据文件,逻辑文件名为MY_DB_DATA1,操作系统文件名为MY_DB_,文件的初始容量为3MB,最大容量为15MB,文件容量递增值为2MB。

④将事务日志文件的最大容量改为 20MB,文件容量递增值改为2MB。

⑤将创建的数据库删除。

具体实现如下:

(1)打开企业管理器并展开服务器,右击其中的“数据库”节点,在弹出的快捷菜单中执行“新建数据库”命令,弹出如图所示对话框。

- 9 -

图1.14 使用企业管理器建立数据库

(2)选择“常规”选项卡,在“名称”文本框中键入数据库名称为“MYDB”。

(3)选择“数据文件”选项卡,在“文件名”列输入MY_DB_DATA,在“位置”列将文件名改为MY_DB_,在“初始大小”列输入5。

(4)选中“文件属性”复选框,在“文件增长”框中选中“按兆字节”单选框,并将其值改为2。

(5)在“最大文件大小”框中选中“将文件增长限制为”单选框,并将其改为15,如图所示。

- 10 -

图1.15 更改逻辑文件名和物理文件名

(6)选择“事务日志”选项卡,在“文件名”列输入MY_DB_LOG,在“位置”列将文件名改为MY_DB_,在“初始大小”列输入3。

(7)选中“文件属性”中的“文件自动增长”复选框,在“文件增长”框中选中“按兆字节”单选框,并将其值改为1。

(8)在“最大文件大小”栏中选中“将文件增长限制为”单选框,并将其改为10,如图所示。

- 11 -

图1.16 设置文件属性

用企业管理器完成修改数据库

(1)在企业管理器中选择“数据库”节点,右击刚刚创建的MYDB数据库,在弹出的快捷菜单中选择“属性”命令;

(2)选择“数据文件”选项卡,在“数据库文件”网格中的第二行添加数据文件,在其中的“文件名”列输入MY_DB_DATA1,在“位置”列将文件名改为MY_DB_,在“分配的空间”列添入3,表示新添加的文件的初始大小为3MB。

(3)选中“文件属性”中的“文件自动增长”复选框,在“文件增长”框中选择“按兆字节”单选框,并将其值改为2。

(3)在“最大文件大小”栏中选中“将文件增长限制为”单选钮,并将其值改为2,在“最大文件大小”栏中选中“将文件增长限制为”单选框,将其值改为20。如图所示。

- 12 -

图1.17 修改数据库

用企业管理器删除上面创建的数据库

(1)在企业管理器中选择“数据库”节点,右击创建的MYDB数据库,在弹出的快捷菜单中选择“删除”命令,弹出“删除数据库”对话框。

图1.18 删除数据库对话框

(2)单击“是”按钮,即可删除该数据库。

5、实例五

本实例讲解使用T-SQL语句完成创建数据库的操作,数据库的要求同上。

(1)打开查询分析器,输入如下语句:

CREATE DATABASE MYDB

ON

(NAME='MY_DB_DATA',

FILENAME='D:PROGRAM FILESMicrosft SQL ServerMSSQLdataMY_DB_',

- 13 -

SIZE=5,MAXSIZE=15,FILEGROWTH=2)

LOG ON

(NAME='MY_DB_LOG',

FILENAME='D:PROGRAM FILESMicrosft SQL ServerMSSQLdataMY_DB_',

SIZE=3,MAXSIZE=10,FILEGROWTH=1

)

GO

(2)按“F5”来执行,创建MYDB数据库。

(3)用T-SQL语句完成修改数据库的操作,语句如下。

ALTER DATABASE MYDB

ADD FILE

(NAME='MY_DB_DATA1',

FILENAME='C:Program FilesMicrosoft SQL ServerMSSQLdataMY_DB_',

SIZE=3,MAXSIZE=15,FILEGROWTH=2

)

GO

ALTER DATABASE MYDB

MODIFY FILE

(NAME='MY_DB_LOG',

MAXSIZE=20,FILEGROWTH=2

)

GO

6、实例六

本实例讲解使用企业管理器操纵表。

按下列要求创建、修改和删除用户表:

(1)创建一个包含如下各字段的员工信息表employees

创建的表如A.1所示。

字段名

empid

name

department

age

memo

数据类型

Char(10)

Char(20)

Tinyint

Tinyint

Varchar(60)

表1.1 员工信息表 employees

注释

员工代号,主键,非空

员工姓名,非空

员工所在部门代号,非空

员工年龄

备注

- 14 -

(2)创建一个包含如下各字段的部门信息表departments

创建的表如表A.2所示

字段名

depid

depname

memo

数据类型

tinyint

Char(10)

Varchar(60)

注释

部门代号,主键,非空

部门名称,非空

备注

表1.2 部门信息表departments

(3)创建一个包含如下字段的表tmp

字段名

id

数据类型

uniqueidentifier

表1.3 表tmp

(4)对上面的表作如下修改

①为employees表添加一个日期型的出生日期字段,添加一个浮点型的工资字段,删除年龄字段。

②将departments表的depid字段设为主键。

③将employees表中的depname字段名改为department,数据类型为tint int型,并设为外键,与departments表中的主键关联,名为FK_emp_dep。

④将departments表中的depname字段长度改为20。

⑤将employees表中的salary字段的值限定在0至10000之间。

(5)删除表tmp

具体实现如下:

(1)用企业管理器完成创建表的操作

具体步骤如下:

①打开企业管理器并展开服务器,单击其中的“数据库”节点,展开其中的一个数据库,并选择其下一级节点“表”。

②右击“表”,在弹出的快捷菜单中执行“新建表”命令,打开表设计窗口,在窗口中按照employees表的要求输入字段名及类型,并将“empid”设为主键。

③单击“保存”按钮,在弹出的“选择名称”对话框中输入表名employess,单击“确定”按钮关闭窗口,完成了employees表的创建。

④重复步骤1至3,但省去创建主键的步骤,建立departments表和tmp表。

注释

- 15 -

图1.19 建立表结构窗口

(2)用企业管理器完成修改表的操作

具体步骤如下:

①打开企业管理器并展开服务器,单击其中的“数据库”节点,展开其中的一个数据库,并单击其下一级节点“表”。

②在企业管理器右侧窗格中选择employees表,右击后,在弹出的快捷菜单中选择“设计表”命令,打开表设计窗口,添加一个日期型的出生日期字段及一个浮点型的工作字段,删除原有的年龄字段,并将department的数据类型改为tiny int型,保存后关闭窗口。

图1.20 修改表窗口

- 16 -

③在企业管理器右侧窗格中选择department表,右击后,在弹出的快捷菜单中选择“设计表”命令,打开表设计窗口。

④单击depid所在行,单击工具条上的“设置主键”按钮,则向departments表中添加了一个主键。

⑤将depname所在行的“长度”一列的值改为20,保存后关闭窗口。

⑥在企业管理器右侧窗格中选择employees表,右击后,在弹出的快捷菜单中选择“设计表”命令,打开表设计窗口。

⑦单击表设计窗口上的“表和索引属性”按钮,在弹出的菜单中选择“关系”选项卡,并单击“新建”按钮。

⑧在“关系名”文本框中输入FK_emp_dep,在“主键表”列中选中departments表及其中的"dep_id"字段,在“外键表”列中选中employess表及其中的department字段,然后按“关闭”按钮。

⑨单击图1.21中的“约束”选项卡,在其中单击“新建”按钮。在“关系名”文本框中输入CK_emp_salary,在“约束表达式”文本框中输入表达式salary>=0 and salary<=10000,然后按“关闭”按钮。

图1.21

⑩保存后关闭设计窗口。

(3)用企业管理器删除表

在企业管理器右侧窗格中单击要删除的tmp表,右击后,在弹出的快捷菜单中选择“删除”命- 17 -

令,在弹出的如图1.22所示的“除去对象”对话框中单击“全部除去”按钮,则删除了表tmp。

图1.22

7、实例七

本实例讲解用T-SQL语句完成创建、更改和删除表的操作。

(1)使用T-SQL语句创建表。

①创建employess表,打开查询分析器,打开MYDB数据库,输入如下语句:

CREATE TABLE employes(

empid char(10) PRIMARY KEY,

name char(20) NOT NULL,

empartment tinyint NOT NULL,

age tinyint NULL,

memo varchar (60)NULL)

按“F5”执行,创建employees。

②创建departments表,打开查询分析器,打开MYDB数据库,输入如下语句:

CREATE TABLE departments(

depid tinyint NOT NULL,

depname char(10)NOT NULL,

memo varchar(60)NULL)

按“F5”执行,创建department表。

③创建tmp表,打开企业管理器,打开MYDB数据库,输入如下语句:

CREATE TABLE tmp

(id uniqueidentifier)

按“F5”执行,创建tmp表。

(2)使用T-SQL语句修改表。

- 18 -

①修改employess表,打开查询分析器,打开MYDB数据库,输入如下语句:

ALTER TABLE employeesDD

ADD birthdate smalldatetime,

salary float

GO

ALTER TABLE employeesDD

DROP COLUMN age

GO

②修改departments表,打开查询分析器,打开MYDB数据库,输入如下语句:

ALTER TABLE departments

ADD CONSTRAINT PK_dep PRIMARY KEY

(

depid

②为表employess添加外键。

ALTER TABLE employees ADD

CONSTRAIN FK_emp_dep FOREIGN KEY

(department)

REFERENCES departments

(depid)

③将departments表中的depname字段长度改为20。

ALTER TABLE departments

ALTER COLUMN depname char(20)

④为employees表中的salary设置约束。

ALTER TABLE [dbo].[employees] ADD

CONSTRAINT CK_emp_salary CHECK (salary>=0 and salary<=10000)

⑤用T-SQL语句删除表tmp,语句如下:

DROP TABLE tmp

- 19 -

实验二 Transact-SQL 语言及数据检索技术

实验目的

 熟练掌握T-SQL语句的使用。

 通过练习,掌握常用的数据检索技术。

实验内容

1.数据库操纵语言的使用

2.常用函数的使用

3.数据库定义语言的使用

4.连接操作的使用

实验步骤

首先建立表employees和表departments,下图为表2.1和2.2中使用的数据。

Empid

0001

0002

0003

0004

0005

0006

0007

0008

Name

王丽

李红

王亮

张小阳

刘大伟

赵思佳

李福祥

忘晓思

Department

1

4

2

1

3

3

2

4

Memo

打字员

副经理

Birthdate

1980-3-12

1964-8-25

1970-1-12

Salary

1000

4000

1200

2100

1200

2000

3000

5000

表2.1 employees表中数据

Depid

1

2

Depname

开发部

集成部

Memo

Depid

3

4

Depname

销售部

服务部

Memo

表2.2 departments表中数据

20

1、实例一

本实例讲解使用数据操纵语句,打开查询分析器,输入语句如下:

(1)查询employees表中的所有数据。

SELECT * FROM employees

(2)查询employees表中的所有数据,并将各行标题用汉语表示。

SELECT empid AS 员工编号,name AS姓名,departments AS 部门编号,memo AS 备注,birthdate AS 出生日期,salary AS 工资

(3)查询departments表中的所有数据。

SELECT * FROM departments

2、实例二

本实例讲解连接操作的使用,打开查询分析器,输入如下语句:

(1)查询employees表中的所有数据,并用departments表中的部门名称来取代起编号显示出来。

SELECT ,,e,

ate,

FROM departments INNER JOIN employees

ON =ments

(2)按部门编号的顺序查询employees表中的所有数据,并用departments表中的部门名称来取代其编号显示出来。

SELECT ,,

e,ate,

FROM departments INNER JOIN employees

ON =ments

ORDER BY ments

(3)查询employees表中工资超过2000的职工。

SELECT * FROM employees WHERE salary>2000

(4)查询employees表中工资超过1500,并且属于开发部的人员,并用departments表中的部门名称来取代其编号显示出来。

SELECT ,,

e,ate,

FROM departments INNER JOIN employees

ON =ments

WHERE e='开发部'AND >1500

3、实例三

本实例讲解通配符和聚集函数的使用,打开查询分析器,输入如下语句。

(1)查询employees表中姓望的职工的所有数据。

21

SELECT * FROM employees WHERE name LIKE'王%'

(2)查询employees表中姓名只含有两个字的职工。

SELECT * FROM employees WHERE name LIKE'_'

(3)查询employees表中所有2世纪60年代出生的职工。

SELECT * FROM employees WHERE year(birthday)LIKE'196[0-9]'

(4)找出employees表中所有未添写出生日期的职工。

SELECT * FROM employees WHERE birthdate IS NULL

(5)查询所有开发部员工的工资总额。

SELECT SUM()AS工资和,

e AS部门FROM departments INNER JOIN

employees ON =ments

WHERE e='开发部'

GROUP BY e

(6)查询所有不属于开发部的员工的基本信息。

SELECT ,,ate,, AS 部门

FROM departments INNER JOIN

employees AS e ON =ment

WHERE NOT(e='开发部')

4、实例四

本实例讲解使用分组和排序语句,打开查询分析器,输入如下语句。

(1)显示工资最高的三位员工的信息。

SELECT TOP 3 employees. *

FROM employees

ORDER BY DESC

(2)在所有填写了出生日期的数据中,找出年龄最大的三位员工的信息。

SELECT TOP 3 employees.*

FROM employees

WHERE biethdate is NOT NULL

ORDER BY birthdate

(3)找出所有工资介于2000到3000之间的职工。

select * FROM employees where salary>=2000 and salary<=3000

(4)找出所有在MEMO字段中含有“经理”两子的员工。

SELECT * FROM employees WHERE memo LIKE'%经理%'

(5)找出所有员工中工资最高的、最低的及平均工资。

SELECT MAX(salary)AS'最高工资',MIN(salary)AS'最低工资',

AVG(salary)AS'平均工资'

22

FROM employees

(6)统计employees 表中各部门的人数。语句如下:

SELECT e'部门',count(*)AS'人数'

FROM departments INNER join

employees on =ment

group by e

(7)查询工资高于3000的员工有多少人。语句如下:

SELECT count(*)as '人数'

from employess

where salary>3000

(8)查询各部门的平均工资,并将结果排序。语句如下:

SELECT e,avg(salary)

From employess

INNER join department on ment=

group by e order by avg(salary)

5、实例五

本实例讲解如何使用UPDATE、INSERT和DELETE语句。

(1)向employees表中添加一条数据。

insert into employees

values('0010','赵月','NULL','1980-12-10',null)

(2)将所有“工资”一项为空的职员,工资定为600。

update employees

set salary=600

where salary is null

(3)将所有工资低于1500的职员涨200元。

update employees

set salary =salary+200

where salary<1500

(4)将所有开发部的职员工资上调10%。

update employees set salary=salary*1.1

from employees inner join departments

where e='开发部'

(5)删除所有年龄大于50的员工的数据。

DELETE FROM employees

WHERE year(getdate())-year(birthdate)>50

(6)删除属于销售部的所有员工。

23

DELETE employees

FROM employees inner join departments

on ment=

where e='销售部'

(7)删除所有员工的数据。语句如下:

TRUNCATE TABLE employees

24

实验三 索引、视图及数据转换、备份和恢复技术

实验目的

 掌握索引的使用方法

 掌握视图的创建和使用

 掌握数据库的转换、备份和恢复技术

实验内容

1.索引的使用

2.视图的使用

3.数据库的转换、备份和恢复

实验步骤

1、实例一

本实例讲解如何创建和使用索引。

①为表employees中的name创建索引,要求索引名为IDX_name,索引类型为非聚焦索引。

②为表departments中的 depid 创建索引,要求索引名为IDX_DEPID,索引类型为非聚焦索引。

操作过程:

(1)用企业管理器完成创建索引

创建IDX_name索引文件的操作如下:

①在SQL Server 2000企业管理器中,展开服务器组,然后展开服务器实例。

②展开“数据库”文件夹,再展开要在其中创建索引的数据库mydb。

③单击“表”目录。

④右击目标表employees,然后执行“所有任务”|“管理索引”命令,单击“新建”按钮,此时出现如图3.1所示的“新建索引”对话框。

⑤选择name列,在索引文件名输入“IDX_name”,单击“确定”按钮关闭“新建索引”对话框,返回“管理索引”对话框,单击“关闭”按钮,结束索引建立过程。

⑥创建IDX_depid索引文件的操作,与上述方法相同。

(2)用Transact-SQL语句创建索引操作

①为表employees中的name创建索引,要求索引名为IDX_name,索引类型为非聚集索引。语句如下:

25

USE mydb

GO

CREATE INDEX IDX_name ON employees(name)

GO

②为表departments创建索引,语句如下:

USE mydb

GO

CREATE INDEX IDX_depid ON department(depid)

GO

图3.1 新建索引对话框

2、实例二

本实例讲解如何创建和使用视图。

按要求创建视图

①视图名为empinfo。

②包含字段empid、name、depname、birthdate、 salary。

③字段别名分别是“雇员编号”、“雇员姓名”、“部门”、“出生日期”和“工资”。

④使用INSERT语句通过视图向雇员数据表添加一条记录,要求“姓名”为“张明”、“工资”为“2000”。

⑤使用UADATE语句通过视图将插入记录的雇员工资改为2100。

⑥执行系统存储过程sp_rename将视图改名为“雇佣信息”。

26

(1)使用企业管理器创建视图

步骤如下:

①在SQL Server 2000企业管理器中,展开服务器组,然后展开服务器实例。

②展开“数据库”文件夹,再展开数据库mydb.

③在该数据库下面右击“视图”目录,然后单击“新建视图”命令。

④右击关系图窗格,然后选择“添加表”命令。

⑤当出现 “添加表”对话框时,选择department 和employees,使其出现在关系图窗格中,然后单击“关闭”按钮。

⑥操作网格,选择视图中各列,如图3.2所示。

⑦在工具栏上单击“运行”按钮,在数据结果区将显示包含在视图中的数据行。

⑧在工具栏上单击“保存”按钮,弹出保存视图对话框,在该对话框中输入视图名empinfo,单击“确定”按钮完成视图的创建。

图3.2 创建视图对话框

(2)使用Transact-SQL

打开查询分析器,在查询窗口输入CREATE VIEW语句创建视图,并指定字段别名。语句如下:

USE mydb

CREATE VIEW empinfo(雇员编号,雇佣姓名,部门,出生日期,工资)

AS

27

SELECT ,,e,

ate,y

FROM departments INNER JOIN

Employees ON =ment

GO

EXEC sp_helptext’empinfo’

GO

(3)使用INSERT语句通过视图向雇员数据表中添加一条记录,要求姓名为“张明”、工资为2000。语句如下:

USE my_db

INSERT INTO empinfo(雇员姓名,工资)

VALUES (‘张明’,2000)

GO

(4)使用UPDATE语句通过视图将插入记录的雇员工资改为2100,语句如下:

USE mydb

GO

UPDATE empinfo

SET 工资=2100

WHERE 雇员姓名=‘张明’

GO

(5)执行系统存储过程sp_rename 将视图改名为“雇员信息”,语句如下:

USE mydb

GO

EXEC sp_rename ‘empinfo’,‘雇员信息’

3、实例三

本实例主要讲解使用SQL Server 2000企业管理器备份和恢复数据库MYDB,数据转换可以参阅讲稿中的相关内容。

操作过程:

(1)创建备份设备

①打开企业管理器并展开服务器,展开其中的“管理”节点,右击“备份”,在快捷菜单中选择“新建备份设备”命令。

②在弹出“备份设备属性-新设备”对话框中,在“名称”文本框中键入“MYDB备份设备”,如图3.3所示。

28

图3.4 备份设备属性对话框

③单击“确定”按钮。

(2)备份数据库

①在企业管理器的服务器中,右击其中的数据库MYDB,在弹出的快捷菜单中执行“所有任务”|“备份数据库”命令。

②在出现的“SQL Server备份”对话框中选择“常规”选项卡。

③在该选项卡的“名称”文本框中键入“MYDB”数据库备份。

④在“备份”单选钮中选择“数据库-完全”选项。

⑤单击“添加”按钮,在弹出的对话框中选择“数据库-完全设备”,然后从下拉列表中选择“MYDB备份设备”如图3.5所示。

⑥单击“选项”选项卡,在该选项卡中选中“完成验证备份”复选框。

⑦单击“确定”按钮。

⑧出现“备份进度”对话框,备份完成后,将弹出消息框“备份操作及验证已成功完成”

29

图3.5 备份数据库对话框

⑨单击“确定”完成数据库备份。

(3)恢复数据库

①在企业管理器的服务器中,右击要还原的数据库MYDB,在弹出的快捷菜单中执行“所有任务”|“还原数据库”命令。

②在出现的“还原数据库”对话框的“还原”单选钮组中选中“从设备”单选钮。

③单击“选择设备”钮,从弹出的对话框中选择备份设备“MYDB备份设备”。

④单击选钮“还原备份集”,选择其中的单选钮“数据库-完全”,如图3.6所示。

30

图3.6 还原数据库对话框

⑤单击“确定”按钮,执行还原操作。

⑥出现“还原进度”对话框,还原完成后,将弹出消息框“数据库MYDB的还原已顺利完成”。

⑦单击“确定”按钮。

31

实验四 触发器及存储过程、自定义函数

实验目的

 掌握触发器的使用

 掌握存储过程的使用

 掌握使用自定义函数

实验内容

1.触发器的创建和使用

实验步骤

1、实例一

本实例讲解创建触发器。

使用T-SQL语句,按下列要求对数据库MYDB的表employees创建、删除触发器。

①基于表employees创建AFTER INSERT触发器NEWEMP,将插入员工的工资额限制在1000以内。

②基于表employees创建AFTER UPDATE触发器CHANGEMP,将员工的工资变动额限制在1500以内。

③使用DROP TRIGGER语句删除用户创建的触发器

打开查询分析器,输入具体语句如下:

(1)创建AFTER INSERT触发器。

USE MYDB

GO

CREATE TRIGGER NEWEMP ON employees

AFTER INSERT

AS

IF(SELECT salary FROM inserted)>100

BEGIN

END

32

PRINT ‘新员工工资不能超过1000’

ROLLBACK

GO

(2)创建AFTER UPDATE触发器。

USE MYDB

GO

CREATE TRIGGER CHANAGEMP ON employees

BEGIN

END

GO

IF(SELECT MAX( ABS())

FROM inserted JOIN deleted

ON =)>1500

BEGIN

PRINT ‘员工工资变动不能超过1500’

ROLLBACK

END

(3)使用DROP TRIGGER语句删除用户创建的触发器。

DROP TRIGGER NEWEMP,CHANGEMP

本实例讲解复合触发器的使用。

2、实例二

(1)在示例pubs数据库的employee表中创建一个For Insert,Update触发器,用于检测输入的日期是否合理。

CREATE TRIGGER employee_insupd ON employee

FOR insert,update

AS

DECLARE @min_lvl tinyint,@max_lvl tinyint,

@emp_lvl tinyint,@job_id smallint

SELECT @min_lvl=min_lvl,@max_lvl=max_lvl,

@emp_lvl=_lvl,@job_id=_id

FROM employee e,jobs j,inserted i

WHERE _id=_id and _id=_id

IF (@job_id=1)and(@emp_lvl<>10)

BEGIN

raiserror('job id 1 expects the default level of 10.',16,1)

RollBack Transaction

END ELSE

IF (not @emp_lvl Between @min_lvl and @max_lvl)

33

BEGIN

END

可以使用以下语句来测试触发器:

insert employee (emp_id,fname,lname,job_id,job_lvl,pub_id)

values(‘ugv21716m',‘ugv',‘dafe',1,10,1389)

3、实例三

本实例讲解UPDATE函数的使用。

IF EXISTS(Select name from sysobjects where name=‘Tri_Upd_Publishers'and type=‘TR')

DROP TRIGGER Tri_Upd_Publishers

GO

CREATE TRIGGER Tri_Upd_Publishers

ON publishers

FOR update

AS

DECLARE @sCountry varchar(30)

IF UPDATE(pub_name)

BEGIN

END

IF UPDATE(country)

BEGIN

SELECT @sCountry=country

FRON inserted

IF @sCountry NOT IN (‘USA',‘France',‘Germany',‘China')

BEGIN

END

END

GO

ROLLBACK TRAN

PRINT‘The row can not be updated'

print ‘Cannot change pub_name'

ROLLBACK TRAN

raiserror(‘the level for job_id:%d should be between %d and %d',

16,1,@job_id,@min_lvl,@max_lvl)

ROLLBACK tran

34

4、实例四

分别使用SQL Server 2000企业管理器的向导和Transact-SQL语句,按下列要求创建、修改和删除存储过程。

(1)用存储过程向导在数据库MYDB中为department表创建一个插入存储过程insert_department。

①打开企业管理器,选择工具菜单中的向导选项,在弹出对话框窗口,双击“数据框”,选择“存储过程向导”则出现欢迎使用创建存储过程向导对话框。

②单击“下一步”按钮,选择希望存储过程保存的数据库。在下拉表中选择MYDB数据库,单击“下一步”按钮,显示出当前数据库中所有的表。

③选择departments表创建一个插入的存储过程,然后单击“下一步”按钮,单击“完成”按钮,表示一个插入存储过程创建完毕。

④如果需要对某个存储过程进行设置,可以在改对话框选定该存储过程,然后单击“编辑”按钮,打开“编辑存储过程属性”对话框,在该对话框内可以完成对该存储的设置,逐步完成对每一个存储过程的设置以后,返回到对话框“正在完成创建存储过程向导”单击“完成”按钮,至此,成功完成了一个存储过程的创建。

(2)用Transact-SQL语句在数据库MYDB中创建存储过程Salary_dept,要求返回指定部门所有雇员的工资总和,其中指定部门的名称以存储过程的输入参数进行传递。打开查询分析器,输入如下的语句:

USE my_db

CREATE PROCEDRE Salary_dept

@Dept tinyint,

@Total money OUTPUT

As

SELECT @ Total=SUM(salary)

FROM employees

WHERE department=@dep

GO

PRINT’该部门的工资总和’+CONVERT(VARCHAR,@Total)

GO

执行这个存储过程,语句如下:

EXECUTE salary_dept 1,@Total OUTPUT

35

实验五 管理SQL SERVER

实验目的:

 掌握登陆帐户的管理

 掌握服务器角色和数据库角色的管理

实验内容:

1.登陆帐户的管理

2.数据库权限和用户权限的管理

实验步骤:

使用企业管理器和Transact-SQL语句完成权限的管理。具体要求如下:

①创建一个用户名为newuserl,口令‘pswdl’的登陆帐户

②创建一个数据库用户。

③为数据库用户设置权限。

1、实例一

本实例讲解如何使用企业管理器完成权限管理。

操作过程:

(1)用SQL企业管理器来创建登陆帐户

①打开企业管理器并展开服务器,展开其中的“安全性”节点。

②右击“登陆”图标,从弹出的快捷菜单中选择“新建登陆”命令,弹出“新建登陆”对话框。

③在“常规”选项卡的“名称”文本框中输入newuserl。

④在“身份验证”区域选中“SQL Server身份验证”单选钮,在“密码”文本框中输入pswdl.

⑤单击“确定”按钮,在弹出的“确定密码”对话框中再输入一次pswdl。

⑥单击“确定”按钮创建登陆。

(2)用企业管理器创建数据库用户

①打开企业管理器并展开服务器,展开其中的“数据库”节点。

②打开要创建新用户的数据库,右击“用户”图标,从弹出的快捷菜单中选择“新建用户”对话框。

③在“登陆名”下拉框内选择已经创建的登陆帐号,在“用户名”文本框呢输入数据库用36

户名。

④在“数据库角色成员”下的选项框中为该用户选择数据库角色。

⑤单击“确定”按钮。

(3)用企业管理器管理用户权限

①打开企业管理器并展开服务器,展开其中的“数据库”节点。

②展开其中的某一数据库,单击“用户”图标则将在右侧窗格中显示该数据库的所有用户。

③在数据库用户清单中选择要进行权限设置的用户,右击用户名后的在弹出的快捷菜单中选择“属性”,在弹出“数据库用户属性”对话框。

④单击对话框中的“权限”按钮,在弹出的对话框中进行对象权限设置。

⑤单季“确定”按钮完成权限设置。

2、实例二

本实例讲解使用T-SQL语句完成权限管理。

(1)用T-SQL语句来创建登陆用户,打开查询分析器,输入如下语句:

Sp_addlogin newuser2,pswd2

(2)用T-SQL语句来创建数据库用户。

USE northwind

GO

EXEC sp_adduser ‘newuser2’,Is

GO

(3)用T-SQL语句来设置用户权限。

USE mydb

GO

CRANT INSERT,UPDATE,DELETE,SELECT

ON employees

TO newuserl

GO

37

实验六 事务处理与事务日志

实验目的

 掌握事务的定义和使用

 比较事务与触发器、存储过程

 管理事物

实验内容

1.隐式事务的使用

2.显式事务的使用

3.比较事务与触发器、存储过程

实验步骤

1、实例一

本实例讲解显示事务的定义和使用。打开查询分析器,输入如下语句:

(1)建立一个单语句显式事务。

Begin Tran

Update roysched

set royalty=royalty*1.10

where title_id Like 'Pc%'

Commit Tran

(2)建立一个多语句显式事务。打开查询分析器,输入如下语句:

BEGIN Tran

UPDATE table_a --对第一个表更新

set x=x+1

where y=100

UPDATE table_b --对第二个表更新

SET z=z+1

--如果没有行被更新,撤销事务

IF @@rowcount=0 or @@error!=0

BEGIN

38

--撤销事务

ROLLBACK Tran

Print '发生错误,没有行被更新'

RETURN

COMMIT Tran

2、实例二

本实例讲解隐式事务的定义和使用。打开企业管理器,输入如下语句:

SET implicit_Transactions ON

INSERT publishers

VALUES(‘9921',‘Workers Press',‘Beijing',‘Bj',‘China')

COMMIT TRAN

SET implicit_Transactions OFF

上述语句相当于下述显示事务

BEGIN TRAN

INSERT publishers

VALUES(‘9921’,‘Workers Press’,‘Beijing’,‘Bj’,‘China’)

COMMIT TRAN

本实例讲解事务与触发器。打开查询分析器,输入如下语句:

CREATE TRIGGER Tri_Upd_Publishers

3、实例三

ON publishers

FOR UPDATE

AS

IF UPDATE(pub_name)

BEGIN

END

GO

当执行如下修改语句:

UPDATE Publishers

SET pub_name=pub_name+'press'

相当于如下完整的事务

BEGIN Tran

UPDATE publishers

SET pub_name=pub_name+‘press'

39

print ‘Cannot change pub_name'

ROLLBACK Tran

IF UPDATE(pub_name)

BEGIN

print ‘cannot change pub_name'

ROLLBACK Tran

END

Commit Tran

4、实例四

本实例讲解事务与存储过程,在存储过程中创建事务。打开查询分析器,输入如下语句:

CREATE PROCEDURE MyProc

@param INT

AS

print ‘Begin Proc'

Print @@TRANCOUNT

BEGIN Tran

print ‘Begin Tran2'

print @@Trancount

INSERT [sample]

VALUES (@param)

print @@Trancount

IF (select count(*) from [sample])>3

BEGIN

Print 'RollBack Tran'

RollBack Tran

Print @@Trancount

END

ELSE BEGIN

print ‘Commit Tran2'

Commit Tran

print @@Trancount

END

GO

执行这个存储过程,在已经添加了3行记录的情况下,在显式事务下执行该存储过程,例如:

BEGIN Tran

EXEC MyProc 5

COMMIT Tran

40

在执行后,将产生错误,分析错误产生的原因,并将其解决。

41

实验七 通过C#访问SQL Server(综合性实验)

实验目的

 通过实验掌握系统前台开发及后台的数据管理功能的实现。

实验内容

结合SQL SERVER与C#相关知识,开发一个班级通讯录系统。

42