触发器在第一次操作时出错

时间:2015-02-16 04:22:29

标签: sql sql-server sql-server-2008 triggers

我有触发更新插入

CREATE TRIGGER tgBooking_update_seat
ON dbo.booking
AFTER INSERT, UPDATE
AS
BEGIN
    IF EXISTS (SELECT * FROM INSERTED) BEGIN
       -- Handle insert or update
       UPDATE Seats 
       SET status = Bookings.statusBooked
       FROM dbo.seat Seats
       INNER JOIN INSERTED Bookings ON Bookings.noSeat = Seats.noSeat
   END 
END

这是我的表seat。这个表是我的座位列表,这个表有一个status列,我默认设置为0。

enter image description here

这是我的表booking。我默认将每个插入操作statusBooked设置为1。如果end等于当前时间,则statusBooked将自动更新为0.

booking table

我想自动将status上的dbo.seat更新为与statusBooked上的dbo.booking相同的值。

  • 如果statusbooked为1,则status应更新为1
  • 如果statusBooked更新为0,则status必须更新为0

所以状态是noSeat的引用statusBooked。我写了触发器,它可以工作。

但是第一次(当所有dbo.seat状态为0时),它都无法正常工作。

示例:

(当status全部为0时)我插入booking(noSeat:1-5),statusBooked为1但status(noSeat:1-5) )保持0.然后我第二次插入,它只是工作。我再次插入booking(noSeat:1-7)statusBooked为1而status(noSeat:1-7)也为1.但status为noSeat 1- 5仍然是0.

我只有一个触发器。那么问题是什么?

1 个答案:

答案 0 :(得分:0)

FROM dbo.seat Seats
INNER JOIN INSERTED Bookings
ON Bookings.noSeat = Seats.noSeat

我认为你的触发器中不需要这段代码,因为你已经提到过要更新你的Seats表:

UPDATE Seats SET

我建议你像这样重写它,然后再试一次:

 UPDATE Seats SET
 status = Bookings.statusBooked
 WHERE Bookings.noSeat = Seats.noSeat

另外我建议你尝试使用关键字'new'而不是INSERTED,因为我自己有触发器的一些问题,我得到了这个建议。希望它能帮到你! 这是关于触发器的问题......有人回答了,你也可以参考它,这里是链接:

I have a syntax error in my code for creating a trigger using sql. I use mysql version 14.14