取最大id号时,对表进行lock。

解决方案 »

  1.   

    用IDENTITY(1,1) 字段在设计表中,int 型 ,标识 先 是,标识种子 1 ,标识增量 1  
    这样,数据库会自动加在记录增加时 新记录 此字段会自动加1 ,就象 MS ACCESS 中的那样 ,这样你无需编程就可以完成了。但此字段不能被编辑。
      

  2.   

    写个存储过程来获取最大编号,通过数据库自己维护锁来保证唯一
    CREATE PROCEDURE sys_get_maxvalue
    (@comp_id common_id, /*公司编号*/
     @bill_id common_id,   /*单据别代码*/
     @id_rtn common_id output /*返回新的单据编号*/
    )
    ASset nocount onbegindeclare @bill_sym_id common_id
    select @max_value = max_value  
      from sys_bill_maxvalue 
     where comp_id = @comp_id and
           bill_id = @bill_id
    update  sys_bill_maxvalue 
    set     max_value = max_value + 1
    where   comp_id = @comp_id and
            bill_id = @bill_idendGO
      

  3.   

    CREATE PROCEDURE sys_get_maxvalue
    (@comp_id common_id, /*公司编号*/
     @bill_id common_id,   /*单据别代码*/
     @max_value  common_id output /*返回新的单据编号*/
    )
    ASset nocount onbeginselect @max_value = max_value  
      from sys_bill_maxvalue 
     where comp_id = @comp_id and
           bill_id = @bill_id
    update  sys_bill_maxvalue 
    set     max_value = max_value + 1
    where   comp_id = @comp_id and
            bill_id = @bill_idend