--階段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 '操作失敗'
S2_day_08第八章項目
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.