-- create 创建
-- alter 更改
-- 程序 存储过程名
create proc usp_guestnumbytypename
--客房类型名称 输出
@typename nvarchar(32) output,
--计数
@count int output
as --例如
--选择
select @count=count(*) from
--客房信息表 内部 连接 客房类型表
Room inner join RoomType
--向 客房信息表.客房类型编号=客房类型.客房类型编号
on Room.RoomTypeID=RoomType.TypeID
--内部连接 客人信息表 向 客人信息表.客房编号=客房.客房编号
inner join GuestRecord on GuestRecord.RoomID=Room.RoomID
-- 类型名称=自定义类型名称
where TypeName=@typename
go
--声明局部变量 @count
declare @count int
--声明@typename
declare @typename nvarchar(32)
--赋值
set @typename ='标准间'
set @count=0
--实行 存储过程名
exec usp_guestnumbytypename @typename output,@count output
--打印
print @count
print '入住'+@typename+'的客人总数是:'+convert(nvarchar(32),@count)
go
--第二题
--创建 程序
create procedure usp_RoomInfo
--声明@roomnum
@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 -1
go
--第三题
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
go
--第四题
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)
begin
rollback tran--回滚事务
end
else
begin
commit tran --提交事务
set @guestID=@@Identity
end
go
--调用
declare @guestID int
exec usp_insertGuestRecord
'410523198806267523','李小龙',1008,1,'2013-3-11','2013-3-15',500,500,@guestID output
if(@guestID>0)
begin
print '插入客人记录操作成功'
print '客户编号是'+convert(nvarchar(20),@guestID)
end
else
print '操作失败'