Sql server 如何插入更新触发器?

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 注:在另

我知道这个问题对你来说很简单。但是我还没有找到正确的答案

我有两张桌子,分别是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小提琴。我的操作代码与您给出的相同。可能重复