陕西国防工业职业技术学院
SQL Server实训报告
专 业: 软件技术专业
班 级:
姓 名:
学 号:
指导老师:
实训时间:
实训地点: 北8-504
成 绩:
软件教研室制
一、实训目标
掌握SQL Server数据库创建方法,掌握数据表、数据库完整性约束、基本查询语句的使用、数据更新方法、视图索引的建立、常用数据库对象的创建及使用、SQL编程序等多方面的综合练习,旨在强化训练,真正做到熟练掌握甚至精通,为以后数据库维护、网络管理、编程打好基础。
二、实训要求
完成实训题目,并将最终结果保存在自己的FTP上(在自己的FTP帐号上建立”RJ3121XXSQL实训”文件夹,将所有实训结果、脚本文件、数据库、实训报告均保存在此文件夹下,XX代表自己的学号),所有操作必须使用T-SQL代码完成。填写如下实训报告。
三、考核标准
(1)平时实习纪律考勤 占10%
(2)实训报告 占40%
(3)代码文件及数据库文件 占40%
(4)实习总结 占10%
SQL Server实训
1.创建数据库
创建一个名称为factory的数据库,脚本文件名:0100.sql,此脚本文件可利用企业管理器自动生成。
(1)将主数据库文件factory_Data.MDF放置在D:\DBF文件夹中,其文件大小自动增长为按5MB增长。
(2)将事务日志文件factory_Log.MDF放置在D:\DBF文件夹中,其文件大小自动增长为按1MB增长。
------------------------------------脚本文件0100.sql-------------- ------------------------------
CREATE DATABASE factory
ON PRIMARY
(NAME='职工信息管理数据库',
FILENAME='D:\DBF\factory_Data.MDF',
FILEGROWTH=5MB
)
LOG ON
(NAME='职工管理数据库',
FILENAME='D:\DBF\factory_Log.MDF',
FILEGROWTH=1MB
)
COLLATE Chinese_PRC_CI_AS
GO
-------------------------------------------------------------------------------------------------------
2.创建和使用表
脚本文件名:0200.sql,此脚本文件可利用企业管理器自动生成。
(1)建立职工表worker,其结构为:职工号:int,姓名:char(8),性别:char(2),出生日期:datetime,党员否:bit,参加工作:datetime,部门号:int。其中“职工号”为主键。在worker表中输入如下记录:
(2)建立部门表depart,其结构为:部门号:int,部门名:char(10)。其中,“部门号”为主键。在depart表中输入如下记录:
(3)建立职工工资表salary,其结构为:职工号:int,姓名:char(8),日期:datetime,工资:decimal(6,1)。其中,“职工号”和“日期”为主键。在salary表中输入如下记录
(4)建立worker、depart和salary3个表之间的关系。
注意:
数据的录入可使用导入的方法,可先建立数据表结构,然后将此数据复制到excel,最后将其导入到数据库中,注意此数据中的日期格式。
3个表之间的关系主要指主外键关系。
--------------------------------------脚本文件0200.sql------------ ------------------------------
USE factory
GO
CREATE TABLE worker
(
职工号 int CONSTRAINT pk_xh PRIMARY KEY,
姓名 char(8) NULL,
性别 char(2) NULL,
出生日期 datetime NULL,
党员否 bit NULL,
参加工作 datetime NULL,
部门号 int NOT NULL
)
GO
CREATE TABLE depart
(
部门号 int CONSTRAINT pk_bmh PRIMARY KEY,
部门名 char(10) NULL
)
GO
CREATE TABLE salary
(
职工号 int NOT NULL,
姓名 char(8) NULL,
日期 datetime NOT NULL,
工资 decimal(6,1) NULL
CONSTRAINT pk_zgh PRIMARY KEY(职工号,日期)
)
GO
-------------------------------------------------------------------------------------------------------
3.数据库完整性
脚本文件名:0300.sql,此脚本文件可利用企业管理器自动生成。
(1)实施worker表的“性别”字段默认值为“男”的约束。
(2)实施salary表的“工资”字段值限定在0~9999的约束。
(3)建立一个规则sex:@性别='男'OR@性别='女',将其绑定到worker表的“性别”列上。
------------------------------------脚本文件0300.sql-------------- ------------------------------
USE factory
GO
ALTER TABLE worker ADD CONSTRAINT df_xb DEFAULT '男'FOR 性别
GO
ALTER TABLE salary ADD CONSTRAINT ck_gz
CHECK(工资>=0 AND 工资<=9999)
GO
CREATE RULE sex_rule AS @性别='男' OR @性别='女'
GO
-------------------------------------------------------------------------------------------------------
4.查询数据
(1).查询所有男性职工的职工号、姓名。脚本文件名:0401.sql。
------------------------------------脚本文件0401.sql-------------- ------------------------------
USE factory
GO
SELECT 职工号,姓名 FROM worker
WHERE 性别='男'
GO
-------------------------------------------------------------------------------------------------------
(2).查询所有20##年以前工作的职工姓名、参加工作时间。脚本文件名:0402.sql。
------------------------------------脚本文件0402.sql-------------- ------------------------------
USE factory
GO
SELECT 姓名,参加工作 FROM worker
WHERE 参加工作<'20##-01-01'
GO
-------------------------------------------------------------------------------------------------------
(3).查询所有市场部的职工姓名、性别、职工号、是否党员。脚本文件名:0403.sql。
------------------------------------脚本文件0403.sql-------------- ------------------------------
USE factory
GO
SELECT 姓名,性别,职工号,党员否 FROM worker
WHERE 部门号='3'
GO
(4).查询所有职工20##年2月的职工工资,显示字段包括职工号、职工姓名、性别、部门名称、工资,并按工资从大到小排序。脚本文件名:0404.sql。
------------------------------------脚本文件0404.sql-------------- ------------------------------
USE factory
GO
SELECT worker.职工号,worker.姓名,worker.性别,depart.部门名,salary.工资
FROM worker,salary,depart
WHERE worker.职工号=salary.职工号 AND
salary.日期>='20##-03-01' AND salary.日期<='20##-03-31' AND
depart.部门号=worker.部门号
order by 工资
GO
-------------------------------------------------------------------------------------------------------
(5).查询所有市场部和人事处职工的职工号、职工姓名。脚本文件名:0405.sql。
------------------------------------脚本文件0405.sql-------------- ------------------------------
USE factory
GO
SELECT 职工号,姓名 FROM worker
WHERE 部门号 in(2,3)
GO
-------------------------------------------------------------------------------------------------------
(6).查询所有职工的总工资、职工号、职工姓名。脚本文件名:0406.sql。
------------------------------------脚本文件0406.sql-------------- ------------------------------
USE factory
GO
SELECT worker.职工号,worker.姓名,sum(工资)AS 总工资
FROM worker,salary
WHERE worker.职工号=salary.职工号
group by worker.职工号,worker.姓名 --让各个单位组合group by
order by sum(工资)
GO
-------------------------------------------------------------------------------------------------------
(7).查询所有职工的年龄,显示字段包括职工号、职工姓名、出生年月、年龄。脚本文件名:0407.sql。
------------------------------------脚本文件0407.sql-------------- ------------------------------
USE factory
GO
SELECT 职工号,姓名,出生日期,year(getdate())-year(出生日期)AS 年龄
FROM worker
GO
-------------------------------------------------------------------------------------------------------
(8).查询各部门的党员人数,显示字段包括部门号、部门名称、党员人数。脚本文件名:0408.sql。
------------------------------------脚本文件0408.sql-------------- ------------------------------
USE factory
GO
SELECT worker.部门号,depart.部门名,count(党员否) AS 党员人数
FROM worker,depart
WHERE worker.部门号=depart.部门号
group by worker.部门号,depart.部门名
GO
-------------------------------------------------------------------------------------------------------
(9).查询所有职工的平均工资,显示字段包括职工号、职工姓名、平均工资。脚本文件名:0409.sql。
------------------------------------脚本文件0409.sql-------------- ------------------------------
USE factory
GO
SELECT 职工号,姓名,AVG(工资) AS 平均工资
FROM salary
group by 职工号,姓名
GO
-------------------------------------------------------------------------------------------------------
(10).查询所有平均工资高于1200的职工信息(职工号、职工姓名、性别)和对应的平均工资。脚本文件名:0410.sql。
------------------------------------脚本文件0410.sql-------------- ------------------------------
USE factory
GO
SELECT salary.职工号,salary.姓名,worker.性别,AVG(salary.工资) AS 平均工资
FROM salary,worker
WHERE salary.职工号=worker.职工号
group by salary.职工号,salary.姓名,worker.性别
having AVG(salary.工资)>'1200'
GO
(11).显示最高工资的职工的职工号、姓名、部门名、工资发放日期和工资。脚本文件名:0411.sql。
------------------------------------脚本文件0411.sql-------------- ------------------------------
USE factory
GO
SELECT worker.职工号,worker.姓名,depart.部门名,salary.日期,salary.工资
FROM worker,depart,salary
WHERE
worker.职工号=salary.职工号 AND
depart.部门号=worker.部门号 AND
salary.职工号=(select top 1 职工号 from salary
group by 职工号
order by MAX(工资) desc)
group by worker.职工号,worker.姓名,depart.部门名,salary.日期,salary.工资
GO
-------------------------------------------------------------------------------------------------------
(12)显示最高工资的职工所在的部门名。脚本文件名:0412.sql。
------------------------------------脚本文件0412.sql-------------- ------------------------------
USE factory
GO
Select depart.部门名
from salary, worker,depart
WHERE worker.职工号=salary.职工号
AND depart.部门号=worker.部门号
AND 工资=(SELECT MAX(工资) FROM salary)
GO
-------------------------------------------------------------------------------------------------------
(13)显示所有平均工资低于全部职工平均工资的职工的职工号和姓名。脚本文件名:0413.sql。
------------------------------------脚本文件0413.sql-------------- ------------------------------
USE factory
GO
Select worker.职工号,worker.姓名
from worker,salary
WHERE worker.职工号=salary.职工号
group by worker.职工号,worker.姓名
having avg(工资)<(select avg(工资) from salary)
GO
5.更新数据
(1).在depart表中插入设备处记录,部门编号为4。脚本文件名:0501.sql。
------------------------------------脚本文件0501.sql-------------- ------------------------------
USE factory
Go
INSERT depart VALUES ('4','设备处')
GO
-------------------------------------------------------------------------------------------------------
(2).在depart表中插入资产处记录,部门编号为当前表中的最大编号+1。脚本文件名:0502.sql。
------------------------------------脚本文件0502.sql-------------- ------------------------------
USE factory
GO
INSERT into depart(部门号,部门名)
VALUES ((select case when max(部门号) is null then 1 else max(部门号)+1 end from depart),'资产处')
GO
-------------------------------------------------------------------------------------------------------
(3).在worker表中插入一条记录,记录内容为职工号20,姓名陈立,性别女,出生日期1955年3月8日,参加工作时间为1975年10月10日,部门号为4。脚本文件名:0503.sql。
------------------------------------脚本文件0503.sql-------------- ------------------------------
USE factory
GO
INSERT INTO worker(职工号,姓名,性别,出生日期,参加工作,部门号)
VALUES ('20','陈立','女','03/08/1955','10/10/1975','4')
GO
-------------------------------------------------------------------------------------------------------
(4).在worker表中插入一条记录,记录内容为职工号为最大职工号+1,姓名张三,性别男,出生日期1965年9月9日,参加工作时间为1980年10月1日,部门号为3。脚本文件名:0504.sql。
------------------------------------脚本文件0504.sql-------------- ------------------------------
USE factory
GO
INSERT INTO worker(职工号,姓名,性别,出生日期,参加工作,部门号)
VALUES((select case when max(职工号) is null then 1 else max(职工号)+1 end from worker),
'张三','男','09/09/1965','10/01/1980','3')
GO
-------------------------------------------------------------------------------------------------------
(5).修改职工1月份工资,将每个人的工资上涨10%。脚本文件名:0505.sql。
------------------------------------脚本文件0505.sql-------------- ------------------------------
USE factory
GO
UPDATE salary
SET 工资=工资*1.1
WHERE 日期='2004.01.04'
GO
-------------------------------------------------------------------------------------------------------
(6).修改所有女性职工2月份工资,将每人的工资加上100元的医疗补贴。脚本文件名:0506.sql。
------------------------------------脚本文件0506.sql-------------- ------------------------------
USE factory
GO
UPDATE salary
SET 工资=工资+100
FROM worker,salary
WHERE worker.性别='女' AND
salary.职工号=worker.职工号
GO
-------------------------------------------------------------------------------------------------------
(7).将所有财务处女性职工的参加工作时间向前推一年。脚本文件名:0507.sql。
------------------------------------脚本文件0507.sql-------------- ------------------------------
USE factory
GO
UPDATE worker
SET worker.参加工作=YEAR(参加工作)-1
FROM depart,worker
WHERE worker.性别='女' AND
depart.部门号='1' AND
worker.部门号=depart.部门号
GO
-------------------------------------------------------------------------------------------------------
(8).删除工资表中工资最高的记录。脚本文件名:0508.sql。
------------------------------------脚本文件0508.sql-------------- ------------------------------
USE factory
GO
SELECT * INTO salary2 FROM salary
GO
DELETE salary2
FROM salary2
WHERE 工资=(SELECT MAX(工资) FROM salary2)
GO
-------------------------------------------------------------------------------------------------------
(9).删除工资表中平均工资最高的职工的工资记录。脚本文件名:0509.sql。
------------------------------------脚本文件0509.sql-------------- ------------------------------
USE factory
GO
DELETE salary2
FROM salary2
WHERE salary2.职工号=(select top 1 职工号 from salary
group by 职工号)
GO
-------------------------------------------------------------------------------------------------------
(10).删除职工为1号的职工的所有信息。脚本文件名:0510.sql。
------------------------------------脚本文件0510.sql-------------- ------------------------------
USE factory
GO
DELETE salary2
FROM salary2
WHERE 职工号='2'
GO
DELETE worker2
FROM worker2
WHERE 职工号='2'
GO
-------------------------------------------------------------------------------------------------------
6.视图
(1)建立视图职工年龄查询,显示所有职工的年龄。脚本文件名:0601.sql。
------------------------------------脚本文件0601.sql-------------- ------------------------------
USE factory
GO
CREATE VIEW 职工年龄视图
AS
SELECT 职工号,姓名,出生日期,year(getdate())-year(出生日期)AS 年龄
FROM worker
GO
-------------------------------------------------------------------------------------------------------
(2)建立视图’党员人数统计’,求出各部门的党员人数。脚本文件名:0602.sql。
------------------------------------脚本文件0602.sql-------------- ------------------------------
USE factory
GO
CREATE VIEW 党员人数统计
AS
SELECT depart.部门名,count(worker.党员否)AS 党员人数
FROM depart,worker
WHERE depart.部门号=worker.部门号
group by depart.部门名
GO
-------------------------------------------------------------------------------------------------------
(3)建立视图20##年1月份工资查询,显示所有职工的姓名和20##年1月份工资数。脚本文件名:0603.sql。
------------------------------------脚本文件0603.sql-------------- ------------------------------
USE factory
GO
CREATE VIEW 二〇##年一月工资查询
AS
SELECT 姓名,工资
FROM salary
WHERE 日期='20##-01-04'
GO
-------------------------------------------------------------------------------------------------------
(4)建立视图职工平均工资查询,显示所有职工的职工号、姓名和平均工资。脚本文件名:0604.sql。
------------------------------------脚本文件0604.sql-------------- ------------------------------
USE factory
GO
CREATE VIEW 职工平均工资查询
AS
SELECT worker.职工号,worker.姓名,AVG(salary.工资) AS 平均工资
FROM worker,salary
WHERE worker.部门号=salary.职工号
group by worker.职工号,worker.姓名
GO
-------------------------------------------------------------------------------------------------------
(5)建立视图20##年2月份工资查询,显示所有职工的职工号、姓名、部门名和20##年2月份工资,并按部门名顺序排列。脚本文件名:0605.sql。
------------------------------------脚本文件0605.sql-------------- ------------------------------
USE factory
GO
CREATE VIEW 二〇##年三月工资查询
AS
SELECT salary.职工号,salary.姓名,depart.部门名,salary.工资
FROM salary,depart,worker
WHERE 日期='20##-03-04' AND
salary.职工号=worker.职工号 AND
worker.部门号=depart.部门号
GO
-------------------------------------------------------------------------------------------------------
(6)建立视图部门平均工资查询,显示各部门名和该部门的所有职工平均工资。脚本文件名:0606.sql。
------------------------------------脚本文件0606.sql-------------- ------------------------------
USE factory
GO
CREATE VIEW 部门平均工资查询
AS
SELECT depart.部门名,AVG(salary.工资)AS 平均工资
FROM depart,salary,worker
WHERE salary.职工号=worker.职工号 AND
worker.部门号=depart.部门号
group by depart.部门号,depart.部门名
GO
-------------------------------------------------------------------------------------------------------
(7)建立视图高工资,显示有平均工资高于1200的部门名和对应的平均工资。脚本文件名:0607.sql。
------------------------------------脚本文件0607.sql-------------- ------------------------------
USE factory
GO
CREATE VIEW 高工资视图
AS
select depart.部门名,AVG(工资) AS 平均工资
from salary,depart,worker
where
worker.职工号=salary.职工号 and
depart.部门号=worker.部门号
group by 部门名
having AVG(工资)>'1200'
GO
-------------------------------------------------------------------------------------------------------
(8)建立视图部门类型,显示所有职工的职工号、姓名和部门类型,其中财务处和人事处属管理部门,市场部属市场部门。脚本文件名:0608.sql。
------------------------------------脚本文件0608.sql-------------- ------------------------------
USE factory
GO
CREATE VIEW 部门类型视图
AS
SELECT worker.职工号,worker.姓名,case depart.部门名
WHEN '财务处' THEN '管理部门'
WHEN '人事处' THEN '管理部门'
WHEN '市场部' THEN '市场部门'
END AS '部门类型'
FROM worker,depart
WHERE worker.部门号=depart.部门号
GO
-------------------------------------------------------------------------------------------------------
7.索引
(1).在worker表的姓名列上创建名为workername的惟一性索引。脚本文件名:0701.sql。
------------------------------------脚本文件0701.sql-------------- ------------------------------
USE factory
CREATE UNIQUE NONCLUSTERED
INDEX workername ON worker(姓名)
GO
-------------------------------------------------------------------------------------------------------
(2).在worker表的出生日期列上创建名为workerborn的非聚集索引,并按从大到小的次序排列。脚本文件名:0702.sql。
------------------------------------脚本文件0702.sql-------------- ------------------------------
USE factory
ALTER TABLE worker
ADD CONSTRAINT workerbron UNIQUE (出生日期)
GO
-------------------------------------------------------------------------------------------------------
(3).在salary表的工资列上创建名为money的非聚集索引,并按从小到大的次序排列。脚本文件名:0703.sql。
------------------------------------脚本文件0703.sql-------------- ------------------------------
USE factory
CREATE UNIQUE NONCLUSTERED
INDEX money ON salary(工资 asc)
GO
-------------------------------------------------------------------------------------------------------
(4).在worker表的参加工作列上创建名为workerwork的非聚集索引,要求强制SQL删除并重新建立索引。脚本文件名:0704.sql。
------------------------------------脚本文件0704.sql-------------- ------------------------------
USE factory
if exists(select name from sysobjects where name='workerwork')
drop index workerwork on worker
go
create index workerwork on worker (参加工作)
GO
-------------------------------------------------------------------------------------------------------
(5)在worker表中的“部门号”列上创建一个非聚集索引workerda,若该索引已存在,则删除后重建。脚本文件名:0705.sql。
------------------------------------脚本文件0705.sql-------------- ------------------------------
USE factory
GO
IF EXISTS(SELECT name FROM sysindexes WHERE name='workerda')
DROP INDEX worker.workerda
GO
CREATE INDEX depno ON worker(部门号)
GO
EXEC sp_helpindex worker
GO
-------------------------------------------------------------------------------------------------------
(6)在salary表的“职工号”和“日期”列创建聚集索引pk_salary,并且强制惟一性。脚本文件名:0706.sql。
------------------------------------脚本文件0706.sql-------------- ------------------------------
USE factory
CREATE UNIQUE NONCLUSTERED
INDEX pk_salary ON salary(职工号,日期)
GO
-------------------------------------------------------------------------------------------------------
8.数据库其他对象
(1).建立默认值时间,获取当前系统时间,并将起捆绑到worker表的参加工作列上。脚本文件名:0801.sql。
------------------------------------脚本文件0801.sql-------------- ------------------------------
USE factory
GO
CREATE default 时间 as getdate()
GO
EXEC sp_bindefault '时间','worker.参加工作'
GO
-------------------------------------------------------------------------------------------------------
(2).建立默认值精确时间,获取当前系统时间,并将其向前推36个小时。脚本文件名:0802.sql。
------------------------------------脚本文件0802.sql-------------- ------------------------------
USE factory
GO
CREATE default 精确时间 as dateadd(hh,-36,getdate())
GO
-------------------------------------------------------------------------------------------------------
(3).创建一个用户自定义数据类型CNO,基本数据类型为datetime,不允许为空。脚本文件名:0803.sql。
------------------------------------脚本文件0803.sql-------------- ------------------------------
USE factory
Exec sp_addtype CNO,'datetime','Not Null'
GO
-------------------------------------------------------------------------------------------------------
(4).将自定义数据类型CNO和默认值精确时间捆绑。脚本文件名:0804.sql。
------------------------------------脚本文件0804.sql-------------- ------------------------------
use factory
go
exec sp_bindefault '精确时间','cno'
go
-------------------------------------------------------------------------------------------------------
(5).创建一个触发器autosr完成salary表中职工姓名的自动输入,即插入一个记录后可以根据worker表中的职工号完成职工姓名的自动输入。脚本文件名:0805.sql。
------------------------------------脚本文件0805.sql-------------- ------------------------------
USE factory
GO
CREATE TRIGGER autosr
ON salary
FOR INSERT
AS
BEGIN
declare @wor_no int,@wor_nm char(8)
select @wor_no=职工号,@wor_nm=姓名 from inserted
insert into salary(职工号,姓名,日期)values(@wor_no,@wor_nm,getdate())
end
GO
-------------------------------------------------------------------------------------------------------
9.SQL编程
(1).若存在职工号为10的职工,则显示其工作部门名称,否则显示相应提示信息。脚本文件名:0901.sql。
------------------------------------脚本文件0901.sql-------------- ------------------------------
use factory
go
if (select count(*) from worker where 职工号=10)>0
select 部门名 from depart,worker
where worker.部门号=depart.部门号 and
worker.职工号=10
else print'没有查该员工'
go
-------------------------------------------------------------------------------------------------------
(2).求出男女职工的平均工资,若男职工平均工资高出女职工平均工资50%,则显示“男职工比女职工的工资高多了”的信息;若男职工平均工资与女职工平均工资比率在1.5~0.8之间,则显示“男职工跟女职工的工资差不多”的信息;否则,显示“女职工比男职工的工资高多了”的信息。脚本文件名:0902.sql。
------------------------------------脚本文件0902.sql-------------- ------------------------------
use factory
go
declare @nan_gz decimal(6, 1),@nv_gz decimal(6, 1),@t decimal(6, 1)
select @nan_gz=avg(salary.工资) from worker,salary
where worker.职工号=salary.职工号 and
worker.性别='男'
select @nv_gz=avg(salary.工资) from worker,salary
where worker.职工号=salary.职工号 and
worker.性别='女'
set @t=@nan_gz/@nv_gz
if @t>1.5
print '男职工比女职工的工资高多了'
else
if @t>=0.8
print '男职工跟女职工的工资差不多'
else
print '女职工比男职工的工资高多了'
go
-------------------------------------------------------------------------------------------------------
(3).显示各职工的工资记录和相应的工资小计。脚本文件名:0903.sql。
------------------------------------脚本文件0903.sql-------------- ------------------------------
use factory
go
select 姓名,工资 from salary
group by 姓名,工资
order by 姓名
compute SUM (工资 ) by 姓名
go
-------------------------------------------------------------------------------------------------------
(4).按性别和部门名的所有组合方式列出相应的平均工资。脚本文件名:0904.sql。
------------------------------------脚本文件0904.sql-------------- ------------------------------
use factory
go
select depart.部门名,worker.性别 ,avg(工资) as 平均工资
from worker,salary,depart
where worker.职工号=salary.职工号 and
worker.部门号=depart.部门号
group by 部门名,性别
go
-------------------------------------------------------------------------------------------------------
(5).先显示worker表中的职工人数,开始一个事务,插入一个职工记录,再显示worker表中的职工人数,回滚该事务,最后显示worker表中的职工人数。脚本文件名:0905.sql。
------------------------------------脚本文件0905.sql-------------- ------------------------------
USE factory
GO
select count(*)as 职工人数 from worker
go
begin transaction
go
insert worker values(16,'李鑫','女',(select convert(datetime,'02/10/63',1)),0,(select convert (datetime,'07/10/02',1)),2)
go
select count(*)as 职工人数 from worker
rollback transaction
select count(*)as 职工人数 from worker
go
-------------------------------------------------------------------------------------------------------
(6).创建一个函数,要求能完成职工平均工资的计算,参数为职工号。脚本文件名:0906.sql。
------------------------------------脚本文件0906.sql-------------- ------------------------------
use factory
go
create function pjgz(@zgh int)
returns decimal(6, 1)
as
begin
declare @pjgz decimal(6, 1)
select @pjgz=(select AVG(工资) from salary where 职工号=@zgh group by 职工号)
return @pjgz
end
go
declare @avg decimal(6, 1)
exec @avg=dbo.pjgz @zgh='15'
select @avg as '平均工资'
go
-------------------------------------------------------------------------------------------------------
(7).创建一个为worker表添加职工记录的存储过程Addworker。脚本文件名:0907.sql。
------------------------------------脚本文件0907.sql-------------- ------------------------------
use factory
go
create proc addworker
as
begin
insert worker values(17,'魏苗','女',(select convert (datetime,'03/16/70',1)),1,(select convert (datetime,'07/12/76',1)),3)
end
go
exec addworker
select * from worker
go
-------------------------------------------------------------------------------------------------------
(8).创建一个存储过程Delworker删除worker表中指定职工号的记录。脚本文件名:0908.sql。
------------------------------------脚本文件0908.sql-------------- ------------------------------
use factory
go
create proc delworker
as
begin
delete from worker
where 职工号=17
end
go
exec delworker
select * from worker
go
-------------------------------------------------------------------------------------------------------
10.安全性
(1).创建一个登录账号ABC,密码为123456。脚本文件名:1001.sql,此脚本文件可利用企业管理器自动生成。
------------------------------------脚本文件1001.sql-------------- ------------------------------
use master
go
create login ABC
with password='123456'
go
-------------------------------------------------------------------------------------------------------
(2).为factory数据库中创建一个用户账号MGZ,并将其关联到ABC登录账号中。脚本文件名:1002.sql,此脚本文件可利用企业管理器自动生成。
------------------------------------脚本文件1002.sql-------------- ------------------------------
use factory
go
create user MGZ for login ABC
GO
-------------------------------------------------------------------------------------------------------
实训总结
通过这次为期两周的SQL SERVER实训,收获颇多,最开始只做了几个题就觉得特别难了,想着后面的题该怎么做,但是通过查找资料和在网上寻找做对了一个后,就觉得不是想象中的那么难,一口气完成了三分之一。经过多番的努力和辛酸,我成功地完成了这次过程艰辛的实训,而且我从中体会到了一种叫做‘成功的喜悦’的感觉,在这当中当然碰到了许多困难,头疼过,郁闷过,努力过,那种小有成就的兴奋是只有置身其中的人才能体会的,就好比我啊,虽然知道人必须成熟稳重,但是偶尔调节一下生活乐趣也是的一项很必要的事情吧。
总之,这次实训为我提供了与众不同的学习方法和学习体会,从书本中走出来,面对现实,为我将来走上社会打下了扎实的基础,为我又点亮了一盏明灯。而且,我也体会到了前人总结出的许多的实践经验,而且一直都知道技术永远是工资的基础,社会是不会要一个一无是处的人的,所以,为了生活庸俗一点,努力一点,多累一点,好好学习技术,才会有好的未来。