У меня есть следующий триггер;
CREATE TRIGGER trFLightAndDestination
ON checkin_flight
AFTER INSERT,UPDATE
AS
BEGIN
IF NOT EXISTS
(
SELECT 1
FROM Flight v
INNER JOIN Inserted AS i ON i.flightnumber = v.flightnumber
INNER JOIN checkin_destination AS ib ON ib.airport = v.airport
INNER JOIN checkin_company AS im ON im.company = v.company
WHERE i.desk = ib.desk AND i.desk = im.desk
)
BEGIN
RAISERROR('This combination of of flight and check-in desk is not possible',16,1)
ROLLBACK TRAN
END
END
Что я хочу, чтобы триггер делал, это проверял таблицы Flight, checkin_destination и checkin_company при добавлении новой записи для checkin_flight. Каждая запись checkin_flight содержит номер рейса и номер стола, где пассажиры должны зарегистрироваться для этого пункта назначения.
Таблицы checkin_destination и checkin_company содержат информацию о компаниях и направлениях, ограниченных определенными стойками регистрации. При добавлении записи в checkin_flight мне нужна информация из таблицы полетов, чтобы получить пункт назначения и компанию с указанным номером рейса. Эту информацию необходимо сверять с имеющимися комбинациями регистрации для рейсов, направлений и компаний.
Я использую триггер, как указано выше, но когда я пытаюсь вставить неправильную комбинацию, триггер это позволяет. Что мне здесь не хватает?
РЕДАКТИРОВАТЬ 1:
Я использую следующий оператор множественной вставки
INSERT INTO checkin_flight VALUES (5315,3),(5316,3),(5316,2)
//5315 is the flightnumber, 3 is the desknumber to checkin for that flight
РЕДАКТИРОВАТЬ 2:
Протестировал вставку одной строки, которая невозможна, затем ошибка выдается правильно. Так что проблема заключается в многократной вставке.