优化MySchool 08客房系列




use hotel
select * from GuestRecord  --客户记录表
select * from dbo.ResideState  --结账状态(是否结账)
select * from dbo.Room  --房间信息
select * from RoomState  --放间状态
select * from RoomType --房间类型

--分析表结构

--阶段1:指导--统计某类型客房的入住客人人数
--分析:根据用户传入的      [客房类型名称]   ,获取该类型客房的         [客人总数  ]
alter procedure  usp_GetTotalNum
 @Typename nvarchar(32),
 @GuestNum int output  --输出参数
as
 select @GuestNum=COUNT(*) from  GuestRecord
 where RoomID in
 (
   select RoomID from  Room 
   where RoomTypeID in
   (
     select TypeID from RoomType
     where TypeName=@Typename
   )
 )


--调用存储过程:
declare @num int
exec usp_GetTotalNum 'Single',@num output
print 'total:'+convert(nvarchar(20),@num)
--标准间
--单人间
--三人间
--总统套房
--长包房
--豪华标准间
--单人套房
--双人套房
select * from guestrecord
--阶段2练习 --根据房间号查询客房信息
--通过房间号查询客房的相关信息
--如果房间号为-1,表示查询所有客房信息,包括客房ID,床位数,
--客房状态ID,客房类型和房价。
create procedure usp_RoomInfo
 @roomnum int
as 
if(@roomnum=-1)
 begin
   --查询所有客房信息
   select room.RoomID,Room.BedNum,Room.RoomStateID,TypeName,TypePrice
	from room,roomtype
	where room.roomtypeid=Roomtype.TypeID
 end

else
begin
	select room.RoomID,Room.BedNum,Room.RoomStateID,TypeName,TypePrice
	from room,roomtype
	where room.roomtypeid=Roomtype.TypeID
	and Room.RoomID=@roomnum
end
--调用
exec usp_RoomInfo 1008

--阶段3:删除某种客房类型记录
--需求说明:根据客房类型删除客房类型记录,
--如果操作成功(客房信息表Room没有
--对应记录才可以删除),返回删除的记录数,否则返回-1
select * from roomtype
select * from room

create procedure  usp_DelListByType
  @typeName nvarchar(20)
as
 if not exists
 (
   select RoomTypeId from room
   where roomtypeid in
   (
     select typeid
     from roomtype
     where typename=@typename
   )
 )
 begin
	delete from roomtype
	where typeName=@typename
    return @@rowcount
end
else  ---房间表中有传入的房间类型记录
return -1

--调用
declare @result int
exec @result=usp_DelListByType '标准间'
if(@result>0)
print '删除了'+convert(nvarchar(20),@result)+'条记录'
else
print @result

--阶段4:练习--插入入住客人记录
 --需求说明:使用存储过程将入住客人信息插入客人信息表中,
 --检查身份证号必须是18个字符组成
 --押金的默认值为1000元
 --将客人入住房间的当前状态设置为"入住"的状态编号
 --如果客人记录插入成功,输出客人流水号。
 create Proc usp_insertGuestRecord
  @identityID nvarchar(20),
  @guestName nvarchar(20),
  @roomID int,
  @resideID int,
  @resideDate datetime,
  @leaveDate datetime,
  @Deposit decimal(18,2)=1000,
  @TotalMoney decimal(18,2),
  @guestID int output
as
 --检查身份证号
  if(len(@identityID)!=18)
  begin
    print '身份证号只能是18位'
    return
  end
  --押金的默认值为1000元(在参数的时候已经设置)
  --插入记录
  begin tran
   declare @ErrorSum int --定义保存错误总和的变量
   insert into GuestRecord
   values(@identityID,@guestName,@roomID,@resideID,
   @resideDate,@leaveDate,@Deposit,@TotalMoney)
   set @ErrorSum=@ErrorSum+@@Error  
   
   --将客人入住房间的当前状态设置为"入住"的状态编号
   declare @roomStateID int
   select @roomStateID=RoomStateID from roomState
   where RoomStateName='已入住'
   
   
   
   update room set RoomStateID=@roomStateID
   where RoomID=@roomID
   set @ErrorSum=@ErrorSum+@@Error
   if(@ErrorSum>0) --insert或者是update这两个过程中至少有一个出现了错误!!!
   begin
     rollback tran
   end
   else
   begin
   commit tran
   set @guestID=@@Identity
   end
   
 --调用
 declare @guestID int
 exec usp_insertGuestRecord 

'410523198806267523','李小龙',1008,1,'2013-3-11','2013-3-15',500,500,@guestID output
if(@guestID>0)
begin
  print '操作成功,客户编号是'+convert(nvarchar(20),@guestID)
end
else
 print '操作失败'
 
 use Myschool
 
 --分组总结
 use MySchool
 select * from result
 order by StudentNo,StudentResult desc
 
 
  
select StudentNo,max(StudentResult)
from Result
group by StudentNo





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值