数据库实验六

--1----------------------------
begin tran
go
insert into 作业项目表 values('zy2016006','112202002','y005',
10000,'张三', '07-01-2016' ,'07-04-2016','07-25-2016',
'作业公司作业一队','堵漏',7000,2500,1000,1400,11900,
'李四','07-26-2016',11900,'王五','07-28-2016')
insert into 材料费表 values('zy2016006','wm001',200,10)
insert into 材料费表 values('zy2016006','wm002',200,10)
insert into 材料费表 values('zy2016006','wm003',200,10)
insert into 材料费表 values('zy2016006','wm004',100,10)

if @@error<>0
begin
print '语句执行失败'
rollback
end
else
begin
print '语句执行成功'
commit
end
--2---------------------------------
begin tran
declare yb cursor for
select *
from 作业项目表
open yb
declare @单据号 varchar(20)
declare @预算单位 varchar(20)
declare @井号 varchar(20)
declare @预算金额 varchar(20)
declare @预算人 varchar(20)
declare @预算日期 varchar(20)
declare @开工日期 varchar(20)
declare @完工日期 varchar(20)
declare @施工单位 varchar(20)
declare @施工内容 varchar(20)
declare @材料费 varchar(20)
declare @人工费 varchar(20)
declare @设备费 varchar(20)
declare @其它费用 varchar(20)
declare @结算金额 varchar(20)
declare @结算人 varchar(20)
declare @结算日期 varchar(20)
declare @入账金额 varchar(20)
declare @入账人 varchar(20)
declare @入账日期 varchar(20)

print '单据号 '+
'预算单位 '+
'井号 '+
'预算金额 '+
'预算人 '+
'预算日期 '+
'开工日期 '+
'完工日期 '+
'施工单位 '+
'施工内容 '+
'材料费 '+
'人工费 '+
'设备费 '+
'其它费用 '+
'结算金额 '+
'结算人 '+
'结算日期 '+
'入账金额 '+
'入账人'+
 '入账日期'

fetch next from yb
into @单据号,
@预算单位 ,
@井号 ,
@预算金额 ,
@预算人 ,
@预算日期, 
@开工日期 ,
@完工日期 ,
@施工单位 ,
@施工内容 ,
@材料费 ,
@人工费 ,
@设备费 ,
@其它费用, 
@结算金额 ,
@结算人 ,
@结算日期, 
@入账金额 ,
@入账人 ,
@入账日期

while(@@fetch_status = 0)
begin
print
@单据号 +' '+
@预算单位 +' '+
@井号  +' '+
@预算金额  +' '+
@预算人  +' '+
@预算日期  +' '+
@开工日期  +' '+
@完工日期  +' '+
@施工单位  +' '+
@施工内容  +' '+
@材料费  +' '+
@人工费  +' '+
@设备费  +' '+
@其它费用 +' '+ 
@结算金额  +' '+
@结算人  +' '+
@结算日期  +' '+
@入账金额  +' '+
@入账人  +' '+
@入账日期 

fetch next from yb
into

@单据号,
@预算单位 ,
@井号 ,
@预算金额 ,
@预算人 ,
@预算日期, 
@开工日期 ,
@完工日期 ,
@施工单位 ,
@施工内容 ,
@材料费 ,
@人工费 ,
@设备费 ,
@其它费用, 
@结算金额 ,
@结算人 ,
@结算日期, 
@入账金额 ,
@入账人 ,
@入账日期 ;
end
--3----------------------------------
if object_id('_someDepCost','p') is not null
drop procedure _someDepCost;
go
create procedure _someDepCost
	@单位代码 varchar(40),
	@起始日期 datetime,
	@结束日期 datetime
as
declare @单位名称 varchar(40);

declare @预算金额 money,
 @结算金额 money,
 @入账金额 money,
 @未结算金额 money,
  @未入账金额 money;

select @单位名称 = 单位名称 from 单位代码表
where 单位代码 = @单位代码

set @预算金额 = (select sum(预算金额) from 作业项目表
where 预算单位 like @单位代码 + '%' and (预算日期 between @起始日期 and @结束日期))

set @结算金额 = (select sum(结算金额) from 作业项目表
where 预算单位 like @单位代码 + '%' and (结算日期 between @起始日期 and @结束日期))

set @入账金额 = (select sum(入账金额) from 作业项目表
where 预算单位 like @单位代码 + '%' and (入账日期 between @起始日期 and @结束日期) and
	(入账金额 is not null))

set @未结算金额 = (select sum(预算金额) from 作业项目表
where (结算金额 is null) and (预算日期 between @起始日期 and @结束日期))


set @未入账金额 = (select sum(结算金额) from 作业项目表
where (入账金额 is null) and (结算日期 between @起始日期 and @结束日期))

set @未结算金额 = @预算金额 - @结算金额
set @未入账金额 = @结算金额 - @入账金额

if @预算金额 is null
set @预算金额  = 0

if @结算金额 is null
set @结算金额  = 0

if @入账金额 is null
set @入账金额  = 0

if @未结算金额 is null
set @未结算金额  = 0

if @未入账金额 is null
set @未入账金额  = 0

declare @result varchar(100)
set @result = convert(varchar,@预算金额)+' '+convert(varchar,@结算金额)+
' '+convert(varchar,@入账金额)+' '+convert(varchar,@未结算金额)+' '+convert(varchar,@未入账金额)

print @单位名称+'单位'+convert(varchar,@起始日期,102)+'--'+convert(varchar,@结束日期,102)+'成本运营状况'
print '预算金额  结算金额  入账金额  未结算金额  未入账金额'
print @result
go

execute _someDepCost @单位代码 = '1122',@起始日期 = '2016-5-1',@结束日期 = '2016-5-29';
execute _someDepCost @单位代码 = '112201',@起始日期 = '2016-5-1',@结束日期 = '2016-5-29';
execute _someDepCost @单位代码 = '112201001',@起始日期 = '2016-5-1',@结束日期 = '2016-5-29';
go

--4---------------------------------------------
--(1)----------------------------
if OBJECT_ID('trmytr1','TR') is not null
drop trigger tr_mytrl
go
create trigger trmytr1 on 作业项目表
after insert
as
declare @结算金额 money
declare @temp1 money,@temp2 money,@temp3 money,@temp4 money;
select @temp1 = 材料费,@temp2 = 人工费,@temp3 = 设备费,@temp4 = 其他费用
from inserted;
set @结算金额 = @temp1+@temp2+@temp3+@temp4;
update 作业项目表
set 结算金额 = @结算金额
where 单据号 = (select 单据号 from inserted);
go
--(2)---------------------------------------------
if OBJECT_ID('trmytr2','TR') is not null
drop trigger tr_mytr2
go
create trigger trmytr2 on 作业项目表
after update
as
declare @结算金额 money
declare @temp1 money,@temp2 money,@temp3 money,@temp4 money;
select @temp1 = 材料费,@temp2 = 人工费,@temp3 = 设备费,@temp4 = 其他费用
from inserted;
set @结算金额 = @temp1+@temp2+@temp3+@temp4;
update 作业项目表
set 结算金额 = @结算金额
where 单据号 = (select 单据号 from inserted);
go

--(3)----------------------------------
if OBJECT_ID('trmytr3','TR') is not null
drop trigger tr_mytr3
go
create trigger trmytr3 on 作业项目表
instead of delete
as
delete from 材料费表
where 单据号 = (select 单据号 from deleted);

--(4)------------------------
begin tran
/*(1)*/ insert into 作业项目表(单据号,预算人,材料费,人工费,设备费,其他费用)
		values('2017000','test',100,200,300,400);
		delete from 作业项目表 where 单据号 = '2017000';
/*(2)*/ insert into 作业项目表(单据号,预算人,材料费,人工费,设备费,其他费用)
		values('2017111','test',100,200,300,400);
		update 作业项目表
		set 材料费 = 100000
		where 单据号 = '2017111';
/*(3)*/insert into 作业项目表(单据号,预算人,材料费,人工费,设备费,其他费用)
		values('2017110','test',100,200,300,400);
		insert into 材料费表
		values('2017110','wm001');
		select 单据号,物码
		from
		材料费表;
		delete from 作业项目表
		where 单据号 = '2017110';
		select 单据号,物码
		from 材料费表
		rollback

 

本文档为数据库上机实验报告,是自己认认真真一步一步写的,报告包含试验中的具体步骤,过程以及代码和实验结果截图,和实验总结。 实验实验题目: 数据库管理系统的使用 实验目的: 掌握SQL SERVER2005的使用和数据库设计的一般方法。 实验内容: (1)SQL SERVER2005的使用 (2)数据库的设计过程并利用SQL SERVER2005建立数据库实验实验题目: 数据库的定义 实验目的:掌握数据表建立、修改、删除、索引的SQL语句。 实验内容: (1)数据表的建立 (2)数据表的修改 (3)数据表的删除 (4)数据表的索引建立 为S表的DEPT建立唯一索引 (5)视图的建立与删除 建立一个计算机系学生基本信息视图CSV(SNO,SNAME,SEX,AGE) 查询1983年以后出生的计算机系学生基本信息。 建立一个计算机系学生成绩视图JSGV(SNO,CNO,GRADE)。 查询计算机系学生选课多于3门的学生学号。 查询计算机系学生2号课不及格的学生学号和成绩。 实验 实验题目: 数据表的操作 实验目的: 掌握数据表数据操作的SQL语句。 实验内容: SQL语句插入数据操作 SQL语句修改数据操作 SQL语句删除数据操作 SQL语句查询数据操作 维护数据SQL语句: (1)在学生表中插入一新生信息(‘200213808’,’HUJING’,’女’,22,’计算机’) (2)删除数据库中学号为’200213801’的退学学生有关信息。 (3)将计算机系学生2号课成绩全部提高5%。 查询数据SQL语句: (4)统计有学生选修的课程门数。 (5)统计HU老师所授每门课程的学生平均成绩。 (6)统计所有选修人数多于20的课程号和选课人数,并按人数降序排列,若人数相等,则按课程号升序排列。 (7)检索所有缓考即成绩为NULL的同学学号、姓名和缓考课程号。 (8)检索‘OS’课成绩高于该课平均成绩的同学学号。 (1) 检索计算机系女生的学号和姓名。 (2) 检索全体学生姓名、出生年份和所在系。 (3) 检索未选修任何课程的学生学号。 (4) 检索WANG老师所授课程号、课程名。 (5) 检索所有姓LI同学的基本信息。 (6) 检索选修‘DATABASE’课程的学生学号。 (7) 检索年龄介于LIPING同学年龄和28岁之间的学生基本信息。 (8) 检索选修TIAN老师所授全部课程的学生学号。 实验实验题目: T-SQL编程 实验目的: 掌握T-SQL语句的使用。 实验内容: 1.定义一个表变量,用来存储两名学生的学号,姓名,所在系。 2.编写一个自定义的函数,该函数接受一个学生姓名,返回其学生表中基本信息及选课情况。 3.试用CASE语句输出学生表中各年龄段的学生人数。 4.编写存储过程,以系别作为参数,统计指定系别的人数,并作为存储过程的输出。 实验题目: 数据库的完整性 实验目的: 掌握数据库的完整性约束定义,完整性检查及违约处理方式。 掌握触发器的定义及使用。 实验内容: 1. 定义S, C表的完整性约束 2. 定义SC表的完整性约束,要求当其被参照表发生删除操作时,违约处理的方式为级联,当其被参照表发生修改操作时,违约处理的方式为拒绝。 3. 触发器 ☆ 建立一DML触发器,每当学生的成绩发生更新时,将更新的学号,成绩存入g-log表内 ☆ 建立一个INSTEAD OF触发器,每当修改课程表中记录时,利用触发器动作替代修改操作。 ☆ 建立一个DDL 触发器,不允许删除数据库中表,并作出响应。 实验 实验题目: 数据库的安全性 实验目的: 掌握SQL SERVER 2005的安全控制机制 实验内容: 1. 创建登录 创建lg1,lg2,并设定口令 2. 定义用户 定义user1,user2,user1以lg1登录,user2以lg2登录,user1定义角色ddl_admin,datareader,datawriter 3. 掌握SQL SERVER 2005架构和用户分离的概念 为user1创建架构u1,并建立test表,通过授权模式的方法,授权给user2表访问test的权限 4. 数据库的授权、收权语句 ☆ 将查询SC表和修改GRADE属性的权限授予用户user1。 ☆ 将对表S的插入权限授予用户user2,并允许他将此权限授予其他用户。 ☆ 收回所有用户对表S的插入权限。 实验实验题目: 数据库的设计 实验目的: 掌握数据库的概念结构设计和逻辑结构与设计,掌握ER图的表示方法即如何将ER模型转化为关系模型 1.学校有若干系,每个系有若干班级和教研室,每个教研室有若干教师,其中有教授和副教授每人各带若干研究生,每个班有若干学生,每个学生选修若干课程,每门课有若干学生选修。 2.某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料组成,不同零件所用的材料可以相同。有些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值