多用户操作情况下如何保证自动生成证号的连续性和唯一性?有一个表,中有一列“证号”,每当向这个表加行时,需要先查出当前最大的证号是几(整数),然后把这个号加一做为新insert行的“证号”。如果是一个用户操作没什么可说的,select max(证号)+1 新证号 from 表 就行了。
但是多用户时,当一个用户单击了“新键”按钮,就该得到一个“证号”,并填入到自己的操作界面上的证号框内,可是另一个用户这时也点了“新健”,他的号怎么办?在第一个用户的“证号”的基础上再加1?那万一第一个用户又决定取消本次操作了,不是出事了么?出现了证号的不连续。大侠们请出手相助。

解决方案 »

  1.   

    create table tb(证号 int identity,名称 varchar(200))
    insert tb values('中国人')
    insert tb values('CSDN人')select * from tbdrop table tb证号          名称
    ----------- ----------
    1           中国人
    2           CSDN人(2 行受影响)
      

  2.   

    我们公司的erp是这样实现的,用一个表来记录各个单据目前的最大编号,新增编号时同时更新这个表的最大编号。 假如最大编号是100000时,下次新增变为100001,这个最大编号人为可以去修改。这样用来弥补短缺的流水号。
      

  3.   


    create table tb(证号 int identity(100001,1),名称 varchar(200)) 
    insert tb values('中国人') 
    insert tb values('CSDN人') select * from tb drop table tb 证号          名称
    ----------- ----------
    100001      中国人
    100002      CSDN人(2 行受影响)
      

  4.   

    谢谢htl258 
    关键我的表已建立且有大量数据
    不想从头再建表
    如何将现有的"证号"改成自增的呢?
      

  5.   

    有一个表,中有一列“证号”,每当向这个表加行时,需要先查出当前最大的证号是几(整数),然后把这个号加一做为新insert行的“证号”。如果是一个用户操作没什么可说的,select max(证号)+1 新证号 from 表 就行了。 
    但是多用户时,当一个用户单击了“新键”按钮,就该得到一个“证号”,并填入到自己的操作界面上的证号框内,可是另一个用户这时也点了“新健”,他的号怎么办?在第一个用户的“证号”的基础上再加1?那万一第一个用户又决定取消本次操作了,不是出事了么?出现了证号的不连续。 
    ————————————————————————————————————————
    1:新建的时候,不生成编号,到录入的时候生成。 2:一般是把新生成的编号插入到专门(保存编号的表)中。每次其他用户操作时查询(保存编号的表)最大的编号。
    并把新生成的编号保存在(保存编号的表),缺点:该用户取消操作,但是编号已经生成,那么无疑会形成断号。
      

  6.   

    select max(证号)+1 新证号 from 表 在保存的瞬间读取后马上保存,尽量减少读取和提交时间,这个应该是毫秒级的,如果数据量太大,在令一个表保存这个信息,一取出及时更新这个表
      

  7.   

    唉,难啊
    谢谢这么多热心的人
    但是没有一个说到点子上
    我的表是已有的,许多列,我不想重新建立
    但是没人能说明如何把已存在的非自增列变成自增列
    还有可能大家都没明白我的程序是有客户端的,客户端发送一个insert后,自增列会产生一个数,我的客户端需要取到这个数并显示在表单上。至于楼上的说法,我觉得有对付之嫌,不过还是感谢您花时间关心我的问题