Sqlserver 利用时间戳 + 自增长ID 生成流水号 模拟并发请求生成重复ID 解决方法
1. 事件起因:
当在sqlserver 中利用 时间戳(22010110) + 请求终端ID (1001) + 四位流水号(开始0001) ;
四位流水号算法
创建表TZD_LSH ;其中id是 自增长 ;系数1
insert into TZD_LSH (Hoisd) select @hospcode
select newid = max(id) from TZD_LSH
2. 生产环境遇到 客户端获取到2个相同的ID
3. 模拟请求:在过程中获取max(int) 的地方加上延迟执行 waitfor delay '00:00:01' 、利用Jmeter 创建10个请求。
可以看到实际请求到的确实重复
4.解决办法: 利用sqlserver 函数 SCOPE_IDENTITY() ;
insert into TZD_LSH (Hoisd) select @hospcode
select newid=SCOPE_IDENTITY()