公司要求开发售票系统,6-10台电脑频频取座位号,每班船的座位号是唯一的,从最小座位号开始售票,为防止重复问题出现,怎样处理最好?
想法:以日期,航班号,座位号为主键,在POST出现异常时重新取MIN号,麻烦各位有此经验的是怎么处理的呢?

解决方案 »

  1.   

    --再帮我看看写的存储过程有没什么问题
    Create Proc GetLugageNum
    @ShipTicketNO varchar(50),
    @OriDate varchar(50),
    @OriHB varchar(50),
    @LugageCount integer
    as --exec GetLugageNum '20060218034792','2006-02-18','10:00',100declare @Temp integer ,@i integertable_loop:set @i=1
     
      Select @Temp=isnull(max(Lug_no),28800000) from LuggageBound where Lug_no like '00288_____'
    BEGIN TRANSACTION while @i<=@LugageCount
    begin
      insert into LuggageBound(ShipTicketNO,OriDate,OriHB,Lug_no,IsLeave,IsThrough)
                       values(@ShipTicketNO,@OriDate,@OriHB,'00'+cast(@Temp+@i as varchar(10)),0,0)  --假如我插入10条记录的话?如果在每5条重复,实际上前4条是不是已经进入了数据库呢?  IF @@ERROR <> 0 --重复时候前台程序还会报主键冲突错?
      BEGIN
        ROLLBACK TRANSACTION --插入重复值时回滚
        GOTO table_loop  --跳转至table_loop重新执行
      END  set @i=@i+1
    end
    COMMIT TRANSACTION  
    GO