SQL存储过程分配宿舍实例

CREATE DATABASE DBStuManage
use DBStuManage

CREATE TABLE TBROOM
(
    ROOMID INT IDENTITY(1,1) primary key,
    RoomNumber INT ,
    RoomBedCount INT,
    studentID INT
)
select * from TBROOM

CREATE TABLE TBSTUDENT
(
    studentID int primary key identity(1,1),
    name NVARCHAR(50) NOT NULL,
    sex bit not null,
    birthday datetime not null,
    majorid int 
)
select * from TBSTUDENT

--USE [DBStuManage]
--GO

--DECLARE   @return_value int

--EXEC  @return_value = [dbo].[DistributeDorm]
--      @bedCount = 4,
--      @startROOmNumber = 102,
--      @name = N'12',
--      @sex = false,
--      @birthday = N'1991-8-8',
--      @majorid = 3

--SELECT    'Return Value' = @return_value

--GO

--use DBStuManage
ALTER PROC DistributeDorm 
    @bedCount int,
    @startROOmNumber int,
    @name nvarchar(10),
    @sex bit,
    @birthday datetime,
    @majorid int

AS 
BEGIN
DECLARE
    @studentID int,
    @currentRoomNumber int,
    @currentRoomBedCount int,
    @isStart int,
    @isHave int
    set @currentRoomNumber = @startROOmNumber
    --插入学生
    INSERT INTO TBSTUDENT values(@name,@sex,@birthday,@majorid)
    --取到当前学生ID
    SELECT @studentID= MAX(STUdentID) FROM TBSTUDENT;
    --SET @studentID = @@IDENTITY
    --判断tbroom是否为空
    SELECT @isStart = COUNT(1) FROM tbRoom
    IF(@isStart = 0 OR @isStart is null )
    BEGIN
        SET @currentRoomNumber = @startROOmNumber
    END
    --判断选择的寝室是否被分配
    SELECT @isHave = COUNT(1) FROM tbRoom WHERE RoomNumber = @startROOmNumber
    IF(@isHave = 0 or @isHave is null)--未被分配
        BEGIN
            --设置寝室号
            SET @currentRoomNumber = @startROOmNumber
            SET @currentRoomBedCount = 0
            --插入学生ID到寝室分配表
            --INSERT INTO tbRoom VALUES (@currentRoomNumber,@currentRoomBedCount + 1,@studentID)
        END
    ELSE
        BEGIN
            --判断寝室是否住满
            SELECT @currentRoomBedCount = COUNT(1) FROM tbRoom WHERE RoomNumber = @currentRoomNumber
            --获取当前已分配到的床号
            SELECT @currentRoomBedCount = COUNT(1) FROM tbRoom WHERE RoomNumber = @currentRoomNumber
            IF(@currentRoomBedCount >= @bedCount)
                BEGIN
                    --判断寝室已经分配到哪一间
                    SELECT @currentRoomNumber = MAX(RoomNumber)FROM tbRoom
                    SELECT @currentRoomBedCount = COUNT(1) FROM tbRoom WHERE RoomNumber = @currentRoomNumber
                    IF(@currentRoomBedCount >= @bedCount)
                        BEGIN
                        SET @currentRoomNumber = @currentRoomNumber + 1
                        SET @currentRoomBedCount = 0    
                        END
                END
                --插入学生ID到寝室分配表

        END     INSERT INTO tbRoom VALUES (@currentRoomNumber,@currentRoomBedCount + 1,@studentID)
    --6.查看寝室分配表
    SELECT * FROM tbRoom order by RoomNumber
END
GO

猜你喜欢

转载自blog.csdn.net/o527883184/article/details/51170203