zoukankan      html  css  js  c++  java
  • SQL Server存储过程作业(三)

    阶段4:练习——插入入住客人记录
    需求说明
    使用存储过程将入住客人信息插入客人信息表中,要求:
    检查身份证号必须是18个字符组成
    押金的默认值为1000元
    如果客人记录插入成功,输出客人流水号;否则输出出错信息
    提示:
    客人的信息作为存储过程的输入参数
    客人流水号作为存储过程的输出参数
    利用事务确保数据完整性
    客人记录插入客人信息表
    修改客人入住房间的人数
    --阶段4:添加一个入住客人的信息
    IF EXISTS(SELECT * FROM sysobjects WHERE name='usp_insertGuestRecord')
      DROP PROC usp_insertGuestRecord
    GO
    CREATE procedure usp_insertGuestRecord
        @GuestID int OUTPUT,                ---客户流水号
        @identityID varchar(50),            ---身份证号
        @guestName nchar(20),                ---客户姓名
        @roomID int,                        ---房间号
        @ResideDate datetime,                ---入住时间
        @deposit decimal(18,2) = 1000        ---押金
    
    AS
        SET @GuestID = -1
        IF (@identityID IS NULL OR LEN(@identityID) <> 18)
            return -1
    
        BEGIN TRANSACTION
        INSERT INTO GuestRecord
        (
            IdentityID,
            GuestName,
            RoomID,
            ResideID,
            ResideDate,
            Deposit)
        VALUES
        (
            @identityID,
            @guestName,
            @roomID,
            1,
            @ResideDate,
            @deposit
        )
        IF (@@ERROR <> 0)
        BEGIN
            ROLLBACK TRANSACTION
            return 'false'
        END
    
        DECLARE @RoomStateID int
        SELECT @RoomStateID=RoomStateID FROM RoomState
        WHERE RoomStateName = '已入住'
        ---客房状态变为“入住”,客人数量增1
        Update Room set RoomStateID =@RoomStateID,GuestNum=GuestNum+1
         WHERE RoomID = @roomID
        IF (@@ERROR <> 0)
        BEGIN
            ROLLBACK TRANSACTION
            return -1
        END
        COMMIT TRANSACTION
        SET @GuestID=@@IDENTITY
        return 0
    GO
    
    --调用存储过程
    DECLARE @identityID varchar(50)            ---身份证号
    DECLARE @guestName nchar(20)            ---客户姓名
    DECLARE @roomID int                        ---房间号
    DECLARE @deposit decimal(18,2)            ---押金
    DECLARE @ResideDate datetime            ---入住时间
    DECLARE @Result varchar(20)
    DECLARE @GuestID int
    
    SET @identityID = '11010119950506112x'
    SET @guestName = '风无痕'
    SET @roomID = 1008
    SET @deposit = 1000
    SET @ResideDate = GETDATE()
    
    EXEC @Result = usp_insertGuestRecord @GuestID OUTPUT,@identityID,@guestName,
                                         @roomID,@ResideDate,@deposit 
    IF (@Result = 0)
    BEGIN
      PRINT '插入客人记录操作成功' 
      PRINT '客人编号是' + CAST(@GuestID AS varchar)
    END
    ELSE
      PRINT '插入客人记录操作失败' 
    阶段5:练习——使用视图查询正在维修的房间信息
    创建视图查询维修房间的信息,要求:
    要有房间号,房间名称,房间状态
    提示:
    连接房间客房信息表
    客房状态表
    客房类型表查询
     
    --查询在维修状态的房间信息
    create view  RoomStateName
    as
        select Room.RoomID,RoomType.TypeName,
        RoomState.RoomStateName 
        from Room
        inner  join RoomType on RoomType.TypeID=Room.RoomTypeID
        inner join RoomState on RoomState.RoomStateID=Room.RoomStateID
        where RoomState.RoomStateName='维修'
    go
    
    select * from RoomStateName
    阶段6:练习——使用事物将已经退房的客户信息删除:
    提示:
    首先将已经退房的客户信息放到历史表里面(historyGuest)
    在将客人信息表里面的数据删除(GuestRecord)
    判断客人是否退房可以判断离开时间是否为空,不为空即是退房
     
     
    --使用事物删除room表里面已经退房的旅客
    begin transaction 
    declare @errorNum  int --错误的号码
    set @errorNum=0
    select *  into historyGuest from  GuestRecord
    where LeaveDate is not null
    set @errorNum=@errorNum+@@ERROR
    delete  from  GuestRecord
    where LeaveDate is not null
    set @errorNum=@errorNum+@@ERROR
    if(@errorNum<>0)
    begin
    print '删除失败,事物回滚'
    rollback transaction
    end
    else
    begin
    print '删除成功'
    commit transaction
    end
  • 相关阅读:
    Saltstack module gem 详解
    Saltstack module freezer 详解
    Saltstack module firewalld 详解
    Saltstack module file 详解
    Saltstack module event 详解
    Saltstack module etcd 详解
    Saltstack module environ 详解
    Saltstack module drbd 详解
    Saltstack module dnsutil 详解
    获取主页_剥离百度
  • 原文地址:https://www.cnblogs.com/wlx520/p/4501970.html
Copyright © 2011-2022 走看看