1

FinalExams テーブルに挿入する SP を作成しています。同じクラスで 2 つの試験が競合しないようにする必要があります。つまり、最初の試験が 9:30 に開始され、10:30 に終了する場合です。この期間の間に試験があってはならないので、10:15 に試験を挿入しようとすると、insert ステートメントは実行されません。

ここに私のコードがあります

ALTER PROC [dbo].[InsertFinalExams] --1,1,3,'12/10/2013','11:00','11:30',1
(
@pClassID int,
@pSectionID int,
@pCourseID int,
@pExamDate datetime,
@pStartHoure datetime,
@pFinishHoure datetime,
@pCreatedBy int
)
AS 
--check if the exam period is valid 
--means if the exam start at hour it cant be finish at any time before the same hour
IF  DATEPART(hh,@pStartHoure) >=   DATEPART(HH,@pFinishHoure ) AND DATEPART(MI,@pStartHoure) >=   DATEPART(MI,@pFinishHoure ) 
    BEGIN
        PRINT('Please enter valid period')
        RETURN
    END
--To check if there is a class has a section and a course
IF NOT EXISTS (SELECT 'TRUE'
           FROM SectionsClasses 
           WHERE ClassID=@pClassID 
           AND SectionID=@pSectionID)
  OR
    NOT EXISTS (SELECT 'TRUE'
            FROM Courses
            WHERE CourseID=@pCourseID )

    BEGIN
        PRINT ('Please choose valid class and section and Course')
        RETURN
    END
--check if there is no exam at the same time
IF EXISTS (SELECT 'TRUE' 
            FROM FinalExams 
            WHERE ClassID=@pClassID
                  AND SectionID=@pSectionID 
                  AND ExamDate=@pExamDate
                  OR @pStartHoure between DATEADD(minute,-1, StartHoure) AND DATEADD(minute,-1,  FinishHoure)   
                  OR  @pFinishHoure between DATEADD(minute,-1, StartHoure) AND  DATEADD(minute,-1, FinishHoure)
                --  OR StartHoure > @pStartHoure
                  --AND FinishHoure < @pFinishHoure
                  )
    BEGIN 
        PRINT('Please choose another time for this exam')
        RETURN
    END
ELSE
        INSERT INTO FinalExams
        Values
            (
            @pClassID,
            @pSectionID,
            @pCourseID,
            @pExamDate,
            @pStartHoure,
            @pFinishHoure,
            @pCreatedBy,
            getdate(),
            null,
            null
            )

WHERE 句に問題があると思います

4

1 に答える 1