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