Проблема, при которой триггер всегда отмечается положительным, хотя, насколько я могу судить, его условия не выполняются.Я хочу, чтобы он отмечался, когда 3 критерия совпадают с другим резервированием, однако всякий раз, когда я запускаю его с какими-либо данными, кажется, что он возвращает ложное срабатывание.
CREATE TRIGGER dbo.doubleBookRevised
ON dbo.tblBookingDetailsRevised
AFTER INSERT
AS
IF Exists (SELECT * FROM inserted i JOIN
dbo.tblBookingDetailsRevised bdr
ON i.locationID = bdr.locationID AND
i.bookedFor = bdr.bookedFor AND
i.bookedTimeSlot = bdr.bookedTimeSlot)
BEGIN RAISERROR ('Double bookings are not allowed.', 16, 1)
ROLLBACK TRANSACTION
RETURN
END
GO
Я уже реализовал некоторую логику в C #интерфейс, чтобы предотвратить двойное бронирование, но когда я запустил программу, она успешно прошла проверку, но пометил ложное срабатывание при попытке записи в таблицу.
Я использовал это для справки, но могу 'Я не понимаю, что отличается от моей реализации, чем решение здесь. Предотвращение двойных бронирований в SQL
РЕДАКТИРОВАТЬ: Следуя совету, я исправил триггер из ПОСЛЕ ВСТАВКИ для ВМЕСТО ВСТАВКИ в следующее:
INSTEAD OF INSERT
AS
IF (NOT Exists (SELECT * FROM inserted i JOIN
dbo.tblBookingDetailsRevised bdr
ON (i.locationID = bdr.locationID) AND
(i.bookedFor = bdr.bookedFor) AND
(i.bookedTimeSlot = bdr.bookedTimeSlot)))
INSERT INTO tblBookingDetailsRevised (bookingID, bookedFor, locationID, bookedTimeSlot, detailEquip)
SELECT i.bookingID, i.bookedFor, i.locationID, i.bookedTimeSlot, i.detailEquip
FROM inserted i
ELSE
BEGIN RAISERROR ('Double bookings are not allowed.', 16, 1)
RETURN
END