S2_day_08第八章项目

--阶段1:根据输入的客房类型名称,统计入住的客人总人数    
create procedure usp_GetGuestNum     
@TypeName varchar(32),    
@GuestNum int output    
as    
    
select @GuestNum=COUNT(*) from GuestRecord    
where RoomID in    
(    
  select RoomID from Room    
  where RoomTypeID in    
  (    
    select RoomTypeID from RoomType    
    where TypeName=@TypeName    
  )    
)    
--调用存储过程    
declare @num int    
exec usp_GetGuestNum '张淼',@num output    
print 'total:'+convert(nvarchar(20),@num)     
    
    
--阶段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,  --押金的默认值为1000元    
  @TotalMoney decimal(18,2),    
  @guestID int output    
as    
 --检查身份证号    
  if(len(@identityID)!=18)    
  begin    
    print '身份证号只能是18位'    
    return    
  end    
    
  --插入记录    
  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    
   --insert或update这两个过程中至少有一个出了错    
   if(@ErrorSum>0)     
   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 '操作失败'    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章