求教一个避免关于生成流水号重复的问题
现在的系统生成流水号一直存在不時產生相同流水號的問題,想修改现有的存储过程。提出了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上添写主从表的信息,注意:如果锁设置不当,会锁定最大值表!