Sqlserver 利用时间戳 + 自增长ID 生成流水号 模拟并发请求生成重复ID 解决方法

摘要:
1.事件起因:当在sqlserver中利用时间戳(22010110)+请求终端ID(1001)+四位流水号(开始0001);四位流水号算法创建表TZD_LSH;其中id是自增长;系数1insertintoTZD_LSH(Hoisd)select@hospcodeselectnewid=max(id)fromTZD_LSH2.生产环境遇到客户端获取到2个相同的ID3.模拟请求:在过程中获取max(i

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个请求。

Sqlserver 利用时间戳 + 自增长ID 生成流水号 模拟并发请求生成重复ID 解决方法第1张
Sqlserver 利用时间戳 + 自增长ID 生成流水号 模拟并发请求生成重复ID 解决方法第2张

可以看到实际请求到的确实重复

4.解决办法: 利用sqlserver 函数 SCOPE_IDENTITY() ;

    insert  into TZD_LSH (Hoisd) select @hospcode  
    select newid=SCOPE_IDENTITY()

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

免责声明:文章转载自《Sqlserver 利用时间戳 + 自增长ID 生成流水号 模拟并发请求生成重复ID 解决方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇配置IIS应用程序池EF分页下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

原生JDBC

JDBCJava DataBase Connectivity,java数据库连接,是一种用于执行SQL语句的Java API。JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java语言编写的接口和类组成。 驱动JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商...

JDBC操纵数据库的步骤(以SQLServer为例)

JDBC的简介 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数...

ORACLE 锁机制

Refer to:http://blog.csdn.net/tianlesoftware/article/details/4696896 万能解决之道,就是从系统级kill掉lock的process  在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事...

SQL Server 触发器

SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。 Ø 什么是触发器 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某...

mybatis 批量插入和where条件使用

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespac...

sql语句常用功能(null值转换为0)

COALESCE(规格,' ') 或者 COALESCE(规格,0) select * from ( SELECT p2.name_template 产品, p3.pname 材料 ,p3.spec 尺寸,(select c2.name from product_part_info c1 LEFT JOIN res_huo c2 ON c1.hpart...