您的位置:首页 > 数据库

Sqlerver数据库课程设计

2017-05-13 16:57 274 查看
--创建数据库
create database JCWZ;
go
use JCWZ;
--创建表

--1.创建物资类型表
create table 物资类型(
物资号 nvarchar(20) primary key,
物资类型 nvarchar(20) not null,
物资名 nvarchar(20) not null
)
--drop table matype
--2.创建供应商表
create table 供应商(
供应商号 nvarchar(20) primary key,
供应商名 nvarchar(20) not null,
城市 nvarchar(20) not null
)
--drop table 入库情况
--3.创建仓库表
create table 仓库(
仓库号 nvarchar(20)  not null primary key,
物资号 nvarchar(20) not null,
物资数量 bigint not null,
备注 nvarchar(100) null
foreign key(物资号) references 物资类型(物资号)
)
--4.创建入库情况表
create table 入库情况(
入库编号 nvarchar(20)not null primary key,
物资号 nvarchar(20) not null,
供应商号 nvarchar(20) not null,
仓库号 nvarchar(20) not null,
物资入库数量 bigint not null,
入库单价 int not null,
入库时间 date not null,
备注 nvarchar(100) null
foreign key(物资号) references 物资类型(物资号),
foreign key(供应商号) references 供应商(供应商号),
foreign key(仓库号) references 仓库(仓库号)
)
--5.创建销售表
create table 销售(
销售编号 nvarchar(20)not null primary key,
物资号 nvarchar(20) not null,
仓库号 nvarchar(20) not null,
物资销售数量 bigint not null,
销售单价 int not null,
销售时间 date not null,
备注 nvarchar(100) null
foreign key(物资号) references 物资类型(物资号),
foreign key(仓库号) references 仓库(仓库号)
)
--修改销售表,增加销售额列
alter table 销售 add 销售额 bigint

--创建存储过程

--1.物资类型表插入单条数据存储过程
use JCWZ;
--物资类型表
create procedure 向物资类型表插入数据
@mno nvarchar(20), @mtype nvarchar(20),@mname nvarchar(20)
as
insert into 物资类型
values(@mno,@mtype,@mname);
exec 向物资类型表插入数据 '10001' ,'结构材料' ,'木材'
exec 向物资类型表插入数据 '10002' ,'结构材料' ,'石材'
exec 向物资类型表插入数据 '10003' ,'结构材料' ,'竹材'
exec 向物资类型表插入数据 '10004' ,'结构材料' ,'水泥'
exec 向物资类型表插入数据 '10005' ,'结构材料' ,'混凝土'
exec 向物资类型表插入数据 '10006' ,'结构材料' ,'金属'
exec 向物资类型表插入数据 '10007' ,'结构材料' ,'砖瓦'
exec 向物资类型表插入数据 '10008' ,'结构材料' ,'陶瓷'
exec 向物资类型表插入数据 '10009' ,'结构材料' ,'玻璃'
exec 向物资类型表插入数据 '10010' ,'结构材料' ,'工程塑料'
exec 向物资类型表插入数据 '10011' ,'装饰材料' ,'涂料'
exec 向物资类型表插入数据 '10012' ,'装饰材料' ,'油漆'
exec 向物资类型表插入数据 '10013' ,'装饰材料' ,'镀层'
exec 向物资类型表插入数据 '10014' ,'装饰材料' ,'贴面'
exec 向物资类型表插入数据 '10015' ,'装饰材料' ,'各色瓷砖'
exec 向物资类型表插入数据 '10016' ,'装饰材料' ,'具有特殊效果的玻璃'
exec 向物资类型表插入数据 '10017' ,'专用材料' ,'防水'
exec 向物资类型表插入数据 '10018' ,'专用材料' ,'防潮'
exec 向物资类型表插入数据 '10019' ,'专用材料' ,'防火'
exec 向物资类型表插入数据 '10020' ,'专用材料' ,'阻燃'
exec 向物资类型表插入数据 '10021' ,'专用材料' ,'防爆'
--物资类型表插入多条数据执行存储过程
declare @n nvarchar(20),@string1 nvarchar(20),@string2 nvarchar(20)
declare @m int
set @m='10021'
while (@m<10100)
begin
set @m=@m+1
set @n=convert(nvarchar(20),@m)
exec  向物资类型表插入数据 @n,'结构材料','竹材'
end

--2.供应商表插入单条数据存储过程
create procedure 向供应商表插入数据
@suno nvarchar(20), @suname nvarchar(20),@city nvarchar(20)
as
insert into 供应商
values(@suno,@suname,@city);
exec 向供应商表插入数据 '98001','阿里巴巴建材', '杭州'
exec 向供应商表插入数据 '98002','武汉三鑫电梯有限公司', '武汉'
exec 向供应商表插入数据 '98106','武汉三鑫电梯有限公司2', '武汉'

--供应商表插入多条数据执行存储过程
declare @n nvarchar(20),@string1 nvarchar(20),@string2 nvarchar(20)
declare @m int ,@k int
set @m='98001'
set @k='1'
while (@m<98105)
begin
set @m=@m+1
set @n=convert(nvarchar(20),@m)
set @k=@k+1
set @string1='阿里巴巴建材'+convert(nvarchar(20),@k)
set @n=convert(nvarchar(20),@m)
exec  向供应商表插入数据 @n,@string1,'杭州'
end

--3.仓库表插入单条数据存储过程
create procedure 向仓库表插入数据
@wno nvarchar(20), @mno nvarchar(20),@number bigint,@beizhu nvarchar(20)
as
insert into 仓库
values(@wno,@mno,@number,@beizhu);
exec 向仓库表插入数据 '1','10001', '20','ww'
exec 向仓库表插入数据 '2','10002', '15',''
exec 向仓库表插入数据 '1003','10003', '15',''
--drop  procedure 向入库情况表插入数据
--仓库表插入一千条数据执行存储过程
declare @n nvarchar(20),@string1 nvarchar(20),@string2 nvarchar(20)
declare @m int ,@k int,@p int
set @m='2'
while (@m<1000)
begin
set @m=@m+1
set @n=convert(nvarchar(20),@m)
set @k=FLOOR(RAND()*18)+10002
set @p=FLOOR(RAND()*200)
set @string1=convert(nvarchar(20),@k)
set @n=convert(nvarchar(20),@m)
exec  向仓库表插入数据 @n,@string1,@p,''
end

--4.入库情况表插入单条数据存储过程
create procedure 向入库情况表插入数据
@ino nvarchar(20), @mno nvarchar(20),@suno nvarchar(20), @wno nvarchar(20),@number bigint,@price int ,@date date,@beizhu nvarchar(20)
as
insert into 入库情况
values(@ino,@mno,@suno,@wno,@number,@price,@date,@beizhu);
exec 向入库情况表插入数据 '201','10001','98001','1','20','100','2017-2-18',''
exec 向入库情况表插入数据 '302','10002','98002','2','20','100','2017-2-18',''

--入库情况表插入多条数据执行存储过程
declare @n nvarchar(20),@string1 nvarchar(20),@string2 nvarchar(20),@string3 nvarchar(20)
declare @m int ,@k int,@p int,@s int,@w int,@num int
declare @BDate DATE,@Edate DATE,@da date
SET @BDate = '2015-07-01'          --下限
SET @EDate = '2017-04-14' --上限
set @m='210'
while (@m<300)
begin
set @m=@m+1
set @k=FLOOR(RAND()*18)+10002
set @s=FLOOR(RAND()*100)+98001
set @w=FLOOR(RAND()*900)+1
set @num=FLOOR(RAND()*100)+20
set @p=FLOOR(RAND()*500)+50
set @da=DATEADD(day,ABS(CHECKSUM(NEWID()))%DATEDIFF(day,@BDate,@Edate),@BDate)
set @n=convert(nvarchar(20),@m)
set @string1=convert(nvarchar(20),@k)
set @string2=convert(nvarchar(20),@s)
set @string3=convert(nvarchar(20),@w)
set @n=convert(nvarchar(20),@m)
exec  向入库情况表插入数据 @n,@string1,@string2,@string3,@num,@p,@da,''
end

--5.销售表插入单条数据存储过程
create procedure 向销售表插入数据
@sno nvarchar(20), @mno nvarchar(20),@wno nvarchar(20),@number bigint,@price int ,@date date,@beizhu nvarchar(20),@sumprice int
as
insert into 销售
values(@sno,@mno,@wno,@number,@price,@date,@beizhu,@sumprice);
exec 向销售表插入数据 '501','10001','1','5','150','2017-2-25','','750'
exec 向销售表插入数据 '601','10001','1','5','150','2017-2-25','','750'
--销售表插入多条数据执行存储过程
declare @n nvarchar(20),@string1 nvarchar(20),@string2 nvarchar(20),@string3 nvarchar(20)
declare @m int ,@k int,@p int,@s int,@w int,@num int
declare @BDate DATE,@Edate DATE,@da date
SET @BDate = '2015-07-01'           --下限
SET @EDate = '2017-04-14' --上限
set @m='501'
while (@m<599)
begin
set @m=@m+1
set @k=FLOOR(RAND()*18)+10002
set @s=FLOOR(RAND()*100)+98001
set @w=FLOOR(RAND()*900)+1
set @num=FLOOR(RAND()*100)+20
set @p=FLOOR(RAND()*500)+50
set @da=DATEADD(day,ABS(CHECKSUM(NEWID()))%DATEDIFF(day,@BDate,@Edate),@BDate)
set @n=convert(nvarchar(20),@m)
set @string1=convert(nvarchar(20),@k)
set @string2=convert(nvarchar(20),@s)
set @string3=convert(nvarchar(20),@w)
set @n=convert(nvarchar(20),@m)
exec  向入库情况表插入数据 @n,@string1,@string2,@string3,@num,@p,@da,''
end

--触发器

--1.创建触发器,实现物资入库自动修改对应的库存
create trigger 入库
on 入库情况 after insert
as
begin
declare @mno nvarchar(20),@wno nvarchar(20),@ino nvarchar(20)
declare @num bigint
select @mno=物资号,@wno=仓库号,@ino=入库编号 from inserted
select @num=物资入库数量 from 入库情况 where 仓库号 =@wno and 物资号= @mno
update 仓库 set 物资数量=物资数量+@num where 仓库号 =@wno and 物资号= @mno
print '修改成功'
end

insert into 入库情况 values('202','10001','98001','1','5','100','2017-2-19','')

--2.创建触发器,实现销
4000
售出库时自动修改对应的库存
create trigger 出库
on 销售 after insert
as
begin
declare @mno nvarchar(20),@wno nvarchar(20),@sno nvarchar(20)
declare @num bigint
select @mno=物资号,@wno=仓库号,@sno=销售编号 from inserted
select @num=物资销售数量 from 销售 where 仓库号 =@wno and 物资号= @mno
update 仓库 set 物资数量=物资数量-@num where 仓库号 =@wno and 物资号= @mno
print '修改成功'
end

insert into 销售 values('502','10001','1','10','150','2017-2-26','','1500')

--创建存储过程查询某段时间内各种物资的入库数量
create procedure 某段时间内各种物资的入库数量 @begindate date,@enddate date
as
select  物资号,sum(物资入库数量) from 入库情况 where 入库时间 between @begindate and @enddate
group by 物资号
exec 某段时间内各种物资的入库数量  '2017-2-18','2017-2-19'

--创建存储过程查询某段时间内各种物资的销售数量
create procedure 某段时间内各种物资的出库数量 @begindate date,@enddate date
as
select  物资号,sum(物资销售数量) from 销售 where 销售时间 between @begindate and @enddate
group by 物资号
exec 某段时间内各种物资的出库数量  '2017-2-25','2017-2-26'

--创建存储过程查询某段时间内各种物资的销售收入

create procedure 某段时间内各种物资的销售收入 @begindate date,@enddate date
as
select 物资号,sum(销售额) from 销售 where 销售时间 between @begindate and @enddate
group by 物资号
exec 某段时间内各种物资的销售收入 '2017-2-25','2017-2-26'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: