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 句に問題があると思います