### (1)创建一个有输入参数的存储过程,用于查询指定类别的所有商品信息。并执行该存储过程。

1
2
3
4
5
6
7
8
9
create procedure proc_displaygoods
	@category varchar(100)
as
select G.GoodsNO 商品编号,G.GoodsName 商品名,G.SalePrice 售价,G.InPrice 进价,G.Number 数量,C.CategoryNO 类别编号,C.CategoryName 类别
from Goods G
join Category C on G.CategoryNO = C.CategoryNO
where CategoryName like @category

execute dbo.proc_displaygoods '饼干'

(2)创建一个有输入输出参数的存储过程,用于查询指定商品名的售价。并执行该存储过程。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
create procedure proc_findsale
	@goodsname varchar(100),@price decimal(18,2) output
as
select @price=SalePrice from Goods where GoodsName = @goodsname
go

declare @goodsname varchar(100),@price decimal(18,2)
set @goodsname = '好吃点'
execute dbo.proc_findsale @goodsname,@price output
select @goodsname 商品名,@price 售价
go

(3)创建一个触发器。向销售表SaleBill中插入一条记录时,这个触发器将更新商品表Goods。Goods 表中数量为原有数量减去销售数量。如果库存数量小于10,则提示"该商品数量小于10,低于安全库存量,请及时进货”;如果原有数量不足,则提示“数量不足!”。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
create trigger tri_updateSaleBill
on SaleBill
after insert
as
begin
	declare @number int,@goodsno varchar(10)
	select @number = Number,@goodsno = GoodsNO from inserted
	if(select Number from Goods where GoodsNO = @goodsno) < @number
		begin
			print '库存不足'
			rollback
		end
	else
		begin
			update Goods set Number = Number - @number where GoodsNO = @goodsno
			if(select Number from Goods where GoodsNO = @goodsno) < 10
				begin
					print '该商品数量小于10,低于安全库存量,请及时进货'
				end
		end
end


CREATE TRIGGER update_goods_number
   ON  salebill
   AFTER INSERT
AS 
BEGIN
	SET NOCOUNT ON;
	declare @salenumber int
	declare @storenumber int
	declare @goodsno varchar(30)
	select @salenumber=number, @goodsno=goodsno from inserted
	select @storenumber=number from goods where goodsno=@goodsno
	if @storenumber<@salenumber 
		begin
			print '库存数量不足'
			rollback
		end
	else
		begin
			update goods set number=number-@salenumber where goodsno=@goodsno
			select @storenumber=number from goods where goodsno=@goodsno
			if @storenumber < 10 
				print '该商品数量小于10,低于安全库存量,请及时进货'
		end
END



--添加一条记录,用于验证
insert into supermarket.dbo.SaleBill values('GN0020','S01','2018-06-09 00:00:00',3);