我有一个由代码给出的表格:
CREATE TABLE Event
(
EventId INT IDENTITY(1,1) CONSTRAINT pk_Event PRIMARY KEY,
ConferenceId INT NOT NULL,
FOREIGN KEY (ConferenceId) REFERENCES Conference(ConferenceId),
RoomId INT,
FOREIGN KEY (RoomId) REFERENCES Room(RoomId),
BeginDate DATETIME NOT NULL,
EndDate DATETIME NOT NULL,
Title VARCHAR(200) NOT NULL,
Description VARCHAR(2000) NOT NULL,
CONSTRAINT date_ck CHECK (DATEDIFF(MINUTE, beginDate, endDate) > 0
AND DATEDIFF(HOUR, beginDate, endDate) <= 5)
);
现在我正在尝试创建一个触发器,以防止添加两个具有重叠时间的事件,现在两个事件可以同时发生。我有这样的事情:
CREATE TRIGGER CheckTwoEventsForOverlapingTime
ON [dbo].Event
AFTER INSERT, UPDATE
AS
IF EXISTS(SELECT begindate, enddate
FROM Event e
WHERE e.conferenceId in (SELECT ConferenceId FROM inserted)
AND ((SELECT BeginDate FROM inserted) > BeginDate
AND (SELECT BeginDate FROM inserted) <= EndDate) OR
((SELECT EndDate FROM inserted) >= BeginDate
AND (SELECT EndDate FROM inserted) < EndDate) OR
((SELECT BeginDate FROM inserted) < BeginDate
AND (SELECT EndDate FROM inserted) > EndDate))
BEGIN
RAISERROR('No two events can take place at the same time.', 16, 1)
ROLLBACK
END
GO
可悲的是,这不想工作。如果事件 A 从上午 10 点开始持续到下午 1 点,当我尝试添加从上午 10 点开始但持续到下午 2 点的事件 B 时,它不会引发错误。我不知道怎么了。