我正在尝试创建一个触发器,将顺序预订号码分配给会话预订。这些号码印在票上,有点像电影票上的座位号。
数据库架构的相关部分是:
----- -----------------
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。
由于某些疯狂的原因,我不能将其作为文字发布,我必须使用屏幕截图...
答案 0 :(得分: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