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()

5.再次利用Jmeter请求10次无重复Id

posted @ 2022-01-10 13:57  三弄梅花  阅读(605)  评论(0编辑  收藏  举报