1

我正在尝试创建一个触发器,将顺序预订号分配给会话预订。这些数字印在门票上,有点像电影票上的座位号。

  1. 创建 SessionBooking 记录时,我希望触发器分配 BookingNumber。
  2. 如果 SessionBooking 被逻辑删除(IsDeleted = 1),则 BookingNumber 应设置为 NULL
  3. 当 SessionBooking 被逻辑删除时,BookingNumber 应该在下次创建 SessionBooking 时重新分配。
  4. Session 还维护一个 BookingCount 的 SessionBookings 没有被逻辑删除
  5. 分配 BookingNumber 后,不应更改(除非将其删除)

数据库模式的相关部分是:

----- -----------------
Table Session 
----- -----------------
PK    SessionID
int   BookingCount      (count of SessionBookings)

----- -----------------
Table SessionBooking
----- -----------------
PK    SessionBookingID
FK    SessionID
int   BookingNumber     (allows nulls)
bool  IsDeleted         (1 = deleted)

这就是我到目前为止所拥有的。这对我来说似乎太复杂了,出于某种原因,有时当我创建 SessionBooking 时,BookingNumber 仍然为 NULL。

出于某种疯狂的原因,我无法将其发布为文本,我必须使用屏幕截图...

在此处输入图像描述

4

1 回答 1

1

这将找到下一个未使用的预订号码。

;with live as (select * from sessionBooking where isdeleted=0)
select isnull(min(t1.bookingNumber)+1,1)
from live t1
    left join live t2 on t1.bookingNumber+1=t2.bookingNumber
where t2.bookingnumber is null
于 2013-08-02T08:40:42.083 回答