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 '操作失敗'    

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