存储过程(SQL SERVER 2008)

一 、实验题目:存储过程
二、 实验目的:熟悉存储过程的定义和使用,熟练运用 select ,update ,insert ,delete 命令完成对学生信息数据库的查询、更新、添加、删除操作。
题目六:
药品(编号,名称,价格,厂商)
处方(药品编号,数量,医生编号)
医生 (编号,姓名,科室,职称)
根据上面基本表的信息定义一个存储过程,完成下面功能:
入口参数:药品编号
1 显示药品信息
2 如果没有处方开此药,删除该药品记录
3 如果价格高于10元,降价至10元。

所测试的数据:

INSERT INTO 医生
(编号,姓名,科室,职称)
VALUES
('1001','张三','外科','主刀医师'),
('1002','李四','内科','主任医师'),
('1003','王五','小儿科','主治医师'),
('1004','王二','眼科','主任医师'),
('1005','赵六','妇科','主刀医师'),
('1006','张力','内科','副主任医师'),
('1007','张力','骨科','主刀医师');
select * from 医生

INSERT INTO 药品
(编号,名称,价格,厂商)
VALUES
('2001','板蓝根','28.00','云南制药'),
('2002','益气养血口服液','29.00','北方制药'),
('2003','小儿感冒颗粒','35.00','三九药业'),
('2004','999感冒灵','14.00','三九药业'),
('2005','维C银翘片','25.00','北方制药'),
('2006','珍珠明目滴眼液','19.00','天龙药业');
select * from 药品

INSERT INTO 处方
(药品编号,数量,医生编号)
VALUES
('2001','2','1002'),
('2001','5','1006'),
('2005','6','1006'),
('2006','3','1004'),
('2002','7','1005'),
('2003','2','1003');
select * from 处方

在这里插入图片描述
定义存储过程:

create procedure ManageMedical @id int
as
if @id not in(select 编号 from 药品)
begin
print('没有该药品')
return 
end

select * 
from 药品 
where 编号 = @id

declare @count int
select @count = COUNT(*) from 处方 where 药品编号 = @id

if(@count = 0)  
delete 
from 药品
where 编号= @id;

else
begin
    declare @price money
    select @price = 价格 
    from 药品 
    where 编号 = @id
    
    if (@price > 10) 
    update 药品 
    set 价格 = 10 
    where 编号 = @id
end
--对有处方开的药品:
ManageMedical 2003
select *
from 药品

在这里插入图片描述

--对没有处方开的药品:
ManageMedical 2004
select *
from 药品

在这里插入图片描述

--对不存在的药品:
ManageMedical 1993
select * 
from 药品

在这里插入图片描述
在这里插入图片描述

发布了42 篇原创文章 · 获赞 30 · 访问量 7191

猜你喜欢

转载自blog.csdn.net/Mr____Cheng/article/details/103762497