在sql server中建立一个表储存一个最大值,当用户取号时锁定表最大值,然后在将最大值加一回存,解除表锁定,这样就不会取出重复的号。

解决方案 »

  1.   

    首先需要写在事务中
    update table set maxid = maxid + 1 where ....
    select maxid from table where ....
    这样,每次获取就不会重复了,当然,如果你的业务没有发生成功 ,maxid还是增加了,问题不大的。
      

  2.   

    假如数据表里的纪录已用:000000,000001,000002,000004
    那么,用户A取号时取得 000005,但在执行往占用号码的数据表里插入数据前用户B也取号呢?这样不也取了 000005 吗?  
    一个不太好的解决方案:用户A取号时取得 000005后,添加 一条新的空记录,添加完成后再更新;如果取消添加,则删除新加的记录。
      

  3.   

    CREATE procedure pCreateMenuString @TableName varchar(50),@fieldname varchar(50)
    as
     
     exec('select isnull((select max(convert(int,right('+@fieldname+',4))) from '+@TableName+'),0)+1 as a')
      

  4.   

    IDENTITY ? 能详细说说吗? 
    我们这些号码具有人为赋予的意义,不能自动的