存储过程练习

 --创建三个表并写一个简单的存储过程,
--要求可以进货、出货并打印小票。
--1,在进货时,没有此商品,直接添加,有此商品,添加进货数量
--2,出货时,有此商品并且数量充足,可以直接减去总数
--不够的时候,货物量不够,请及时补充
--3,出货时,没有此商品,print没有此商品


--表一:供应商  gongying
--供应商编号gcode    int    主键   从1001开始,依次加1
--供应商名称gname varchar(50)
--供应商联系电话gtel varchar(50)

--表二: 仓库表   cangku
--产品编号ccode int      主键10001
--产品名称cname varchar(50)
--产品价格cprice decimal(18,2)
--产品数量cshu int
--供货商的编号 cgcode int   外键(供应商表的编号)

--表三: 小票表 piao
--小票编号pcode int    从100000001开始依次加1
--产品名称pname varchar(50)
--产品单价pprice decimal(18,2)
--产品数量pshu int
--产品总价pzong decimal
 

create table gongying
(
gcode int identity(1001,1) primary key,
gname varchar(50),
gtel varchar(50)
)
go
create table cangku1
(
ccode int primary key,--10001
cname varchar(50),
cprice decimal (18,2),
cshu int ,
cgcode int
)
go
create table piao
(
pcode int identity(1000001,1),
pname varchar(50),
pprice decimal(18,2),
pshu int,
pzong decimal (18,2)
)
go
insert into gongying values ('海尔','0211-7589654')
insert into gongying values ('海信','0311-6556654')
insert into gongying values ('恒佳','0531-3589654')
insert into gongying values ('艾玛','1211-4589654')
insert into gongying values ('富士康','0811-12589654')
go
insert into cangku1 values (10001.,'电视',1288,35,1001)
insert into cangku1 values (10002.,'冰箱',888,20,1002)
insert into cangku1 values (10003.,'洗衣机',569,30,1003)
insert into cangku1 values (10004.,'电脑',2608,40,1004)
insert into cangku1 values (10005.,'笔记本',3400,48,1005)
go
create proc oeproc
@code int,
@name varchar(50),
@price decimal(18,2),
@shu int,
@gcode int
as
declare @count int
select @count=COUNT(*)from cangku1 where ccode=@code
if @count=1--有此商品
begin
if @shu>=0--进货
begin
update cangku1 set cshu=cshu+@shu where ccode =@code
end
else--出货
begin
declare @sum int
select @sum=cshu from cangku1 where ccode=@code
if @sum+@shu>=0
begin
update cangku1 set cshu=cshu+@shu where ccode =@code
insert into piao values (@name,@price,abs (@shu),ABS(@price*@shu))
end

else
begin
print '货物不够,请及时补充'
end
end
end
else--无此商品
begin
if @shu>=0--进货
begin
insert into cangku1 values(@code,@name,@price,@shu,@gcode)
end
else
begin
print '没有此货物,及时补充'
end
end
go
select * from gongying
select * from cangku1

--执行
--进货,没有此产品
exec oeproc 1006,'手机',688,20,1002
--进货,有此产品
exec oeproc 1006,'手机',688,10,1002

--出货,有此产品,货物不够
exec oeproc 1006,'手机',688,-50,1002

--出货,有此产品,且充足
exec oeproc 1006,'手机',688,-10,1002

--出货,没有此产品
exec oeproc 10007,'空调',1088,10,1001

原文地址:https://www.cnblogs.com/dulovexin/p/4995042.html