-- create 创建-- alter 更改-- 程序 存储过程名create proc usp_guestnumbytypename --客房类型名称 输出@typename nvarchar(32) output,--计数@count int outputas --例如--选择select @count=count(*) from --客房信息表 内部 连接 客房类型表Room inner join RoomType--向 客房信息表.客房类型编号=客房类型.客房类型编号on Room.RoomTypeID=RoomType.TypeID--内部连接 客人信息表 向 客人信息表.客房编号=客房.客房编号inner join GuestRecord on GuestRecord.RoomID=Room.RoomID -- 类型名称=自定义类型名称where TypeName=@typenamego--声明局部变量 @countdeclare @count int--声明@typenamedeclare @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 intas --判断if(@roomnum=-1) begin --查询所有客房信息 select room.RoomID,Room.BedNum,Room.RoomStateID,TypeName,TypePrice from room,roomtype where room.roomtypeid=Roomtype.TypeID endelsebegin select room.RoomID,Room.BedNum,Room.RoomStateID,TypeName,TypePrice from room,roomtype where room.roomtypeid=Roomtype.TypeID and Room.RoomID=@roomnumend--调用exec usp_RoomInfo -1go --第三题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 @@rowcountendelsereturn -1--调用declare @result int--实行exec @result=usp_DelListByType '长包房'if(@result>0)print '删除酒店客房类型编号是三人间的记录'+convert(nvarchar(20),@result)+'条'elseprint @resultgo--第四题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 outputas --检查身份证号 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 outputif(@guestID>0)begin print '插入客人记录操作成功' print '客户编号是'+convert(nvarchar(20),@guestID)endelse print '操作失败'