【发布时间】:2010-05-03 17:40:05
【问题描述】:
我有以下触发器;
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
我希望触发器做的是在添加 checkin_flight 的新记录时检查表 Flight、checkin_destination 和 checkin_company。 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: 测试了不可能的单行插入,然后错误被正确抛出。所以似乎是多重插入造成了问题。
【问题讨论】:
标签: sql sql-server sql-server-2008 triggers