【发布时间】:2015-02-12 03:14:27
【问题描述】:
我有 2 个表 dbo.booking 和 dbo.seat 具有这些结构:
dbo.booking具有列noBooking, noSeat, start, [end], statusBookeddbo.seat具有列noSeat, statusSeat
我插入到dbo.booking(statusBooked 值设置为 1)然后在dbo.seat 列statusSeat(默认为 0)上的每一行数据将更新为 1。
如果statusBooked 更新为0,那么statusSeat 也将更新为0。
我的意思是statusSeat(默认为0)将更新并遵循statusBooked的值。
我尝试使用触发器:
ALTER TRIGGER [dbo].[TriggerUpdateSeat]
ON [dbo].[booking]
AFTER INSERT, UPDATE
AS
UPDATE dbo.seat
SET seat.statusSeat = i.statusBooked
FROM Inserted i
WHERE dbo.seat.noSeat = i.noSeat;
但问题是当我第一次在dbo.booking 上插入数据时,dbo.seat 填充的statusSeat 必须更新为 1 但未更新为 1 它不起作用。但是对于第二个和转发它有效。 statusSeat 值跟随 statusBooked 值。
该问题仅在我第一次运行程序并插入数据时发生。
为什么?
【问题讨论】:
-
您的表
seat似乎通过noSeat列引用了booking- 对吧?那么为什么你甚至需要statusSeat列呢?只需加入dbo.Booking表并读出statusBooked- 没有必要让两列包含相同的信息,并担心保持它们同步 - 避免这种数据冗余! -
是的,座位参考通过 noSeat 列预订。因为我有一些座位,我想显示哪个已预订和哪个可用,所以我添加了 statusSeat。 statusBooked 仅用于“交易”状态。如果我没有添加 statusSeat,我将很难在我的项目的另一个案例中执行。那么如何解决我上面的问题呢? @marc_s
标签: sql-server sql-server-2008 triggers