【发布时间】:2015-02-16 04:22:29
【问题描述】:
我有更新插入的触发器
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。
这是我的桌子booking。默认情况下,我将每个插入操作都设置为 statusBooked 为 1。如果end 等于当前时间,那么statusBooked 将自动更新为0。
我想将dbo.seat 上的status 自动更新为与dbo.booking 上的statusBooked 相同的值。
- 如果
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 个触发器。那么有什么问题呢?
【问题讨论】:
-
statusBook是计算列吗?
-
计算?你什么意思?
-
如何自动更新到0列statusBook?。
标签: sql sql-server sql-server-2008 triggers