如何使用SQL Server触发器在字段中创建连续数字?

时间:2013-08-02 03:21:58

标签: sql sql-server triggers

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

  1. 创建SessionBooking记录时,我希望触发器分配BookingNumber。
  2. 如果逻辑删除了SessionBooking(IsDeleted = 1),则应将BookingNumber设置为NULL
  3. 当逻辑删除SessionBooking时,应在下次创建SessionBooking时重新分配BookingNumber。
  4. 会话还维护一个未被逻辑删除的SessionBookings预订
  5. 一旦分配了BookingNumber,就不应更改(除非将其删除)
  6. 数据库架构的相关部分是:

    ----- -----------------
    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。

    由于某些疯狂的原因,我不能将其作为文字发布,我必须使用屏幕截图...

    enter image description here

1 个答案:

答案 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