日期:2014-05-18  浏览次数:20682 次

求教一个避免关于生成流水号重复的问题
现在的系统生成流水号一直存在不時產生相同流水號的問題,想修改现有的存储过程。提出了1种方法

增加StartValue的,   避免時間差产生的流水号

DECLARE   @startValue   numeric
update   basedb_m..commonstart   set   @startValue   =   startvalue   =   startvalue   +   1
where   tablename   =   'ErrorLog '   and   colname   is   null   and   startdate   =   '2004-01-08   12:10:10.073 '
print   @startValue

我是考虑如果用这种方法的话,是不是有了多对磁盘的开销?

同时问问大家这种方法好不好,或怎么改进?




------解决方案--------------------
为什么不用identity字段呢?
------解决方案--------------------
可以把流水号保存到一个单独的表中,在真正追加数据时才更新最大流水号+1
------解决方案--------------------
可以把流水号保存到一个单独的表中,在真正追加数据时才更新最大流水号+1

UP
------解决方案--------------------
用identity字段不行吧,有時要刪除,有時是一個月來流水。用存儲過程。
可以把流水号保存到一个单独的表中,在真正追加数据时才更新最大流水号+1
這個方法是好的。

------解决方案--------------------
要不在table上建個促發器?似乎也有起到隊列的作用??
------解决方案--------------------
流水号的通用做法是:
记录新增时取最大值
当删除当前记录时,update当前删除记录以下的所有记录的流水号-1
------解决方案--------------------
identity 或者 用个表保留当前最大LSH
------解决方案--------------------
约束或主键啊?
------解决方案--------------------
建个表来存当前最大值和步长,获取的时候用行级锁,保证唯一性
select ?
from tblCommonNumberRange with(rowlock)
------解决方案--------------------
你的方法已经足够好了。
------解决方案--------------------
可以把流水号保存到一个单独的表中,在真正追加数据时才更新最大流水号+1
---------------------------------------
方法不错!这样可以解决在Form上添写主从表的信息,注意:如果锁设置不当,会锁定最大值表!