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