Sql server 如何插入更新触发器?
我知道这个问题对你来说很简单。但是我还没有找到正确的答案 我有两张桌子,分别是dbo.seat和dbo.booking 这是座位表。我将所有列表席位放入,并将状态设置为0 座位表> 这是预订桌。当我插入时,默认情况下statusBooked为1。如果[end]等于当前时间,则statusBooked将自动更新为0 我想在dbo上确定状态。座位是dbo上预订的参考状态。NOSAT预订。如果statusBooked为1,则状态也为1,但当statusBooked更新为0时,则状态也更新为0 注:在另一种情况下,由于某种原因,我将状态分为两种Sql server 如何插入更新触发器?,sql-server,triggers,insert-update,Sql Server,Triggers,Insert Update,我知道这个问题对你来说很简单。但是我还没有找到正确的答案 我有两张桌子,分别是dbo.seat和dbo.booking 这是座位表。我将所有列表席位放入,并将状态设置为0 座位表> 这是预订桌。当我插入时,默认情况下statusBooked为1。如果[end]等于当前时间,则statusBooked将自动更新为0 我想在dbo上确定状态。座位是dbo上预订的参考状态。NOSAT预订。如果statusBooked为1,则状态也为1,但当statusBooked更新为0时,则状态也更新为0 注:在另
如何操作?以下触发器将使用INSERT、UPDATE和DELETE保持字段同步
CREATE TRIGGER tg_booking_update_seat
ON dbo.booking
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
IF EXISTS (SELECT * FROM INSERTED) BEGIN
-- Handle insert or update
UPDATE Sets SET
status = Bookings.statusBooked
FROM dbo.seat Seats
INNER JOIN INSERTED Bookings
ON Bookings.noSeat = Seats.noSeat
END ELSE BEGIN
-- Handle booking being deleted
UPDATE Seats SET
status = 0
FROM dbo.seat Seats
INNER JOIN DELETED Bookings
ON Bookings.noSeat = Seats.noSeat
END
END
GO
更新而不删除,您的触发器可以简化为:
CREATE TRIGGER tg_booking_update_seat
ON dbo.booking
AFTER INSERT, UPDATE
AS
BEGIN
-- Handle insert or update
UPDATE Sets SET
status = Bookings.statusBooked
FROM dbo.seat Seats
INNER JOIN INSERTED Bookings
END
GO
我不需要删除语句。如果我删除您的delete sql语句,可以吗@杰森瓦布绝对是。如果您预计不需要触发器的删除部分,我添加了第二个选项。如果您曾经手动删除状态为Booked=1的预订,您将面临风险。删除预订后,座位将保持状态为1。哦,我明白了。它起作用了。但为什么我第一次做插入,桌上的座位上什么也没发生,没有更新状态。然后,如果我做第二次插入,只需更新它的状态。所以它适用于预订表上的第二个操作,而不是我第一次这样做:当所有状态仍然为0时。为什么?我必须看到你的代码操纵预订表。让我把这段代码放到SQLFIDLE中确认一下。你是什么意思?我不懂SQL小提琴。我的操作代码与您给出的相同。可能重复