本帖最后由 ranxu555 于 2012-07-01 14:47:08 编辑

解决方案 »

  1.   

    http://blog.csdn.net/dba_huangzj/article/details/7685162看看我整理的这篇对你有没有帮助
      

  2.   

    这段语句,如果使用多线程,肯定就不能避免出现多个相同的SPE_ID.
      

  3.   

    1楼整理的文章我看了,没有能解决我的问题,我的时间参数是不固定,添加的时候是根据时间(参数)去查询表里的跟时间对应的最大流水号(SPE_ID)……我用JAVA开了3个线程调用,到最后总是会出现丢失数据。
      

  4.   

    1楼整理的文章我看了,没有能解决我的问题,我的时间参数是不固定,添加的时候是根据时间(参数)去查询表里的跟时间对应的最大流水号(SPE_ID)……我用JAVA开了3个线程调用,到最后总是会出现丢失数据。
      

  5.   

    1. 先在当前数据库中新建一张表,例如 TB_FLAG,然后任意插入一条数据:
    CREATE TABLE TB_FLAG
    (
      FLAG INT 
    )
    INSERT INTO TB_FLAG SELECT 02. 在 BEGIN TRAN 的语句块中先执行这条语句,放在你的“INSERT INTO report_information ”语句的上面:
    UPDATE TB_FLAG SET FLAG = FLAG + 1 原理:在事务里面使用UPDATE时会保持X锁,这样就保证了同一时间运行的其他相同代码会被已经运行的事务BLOCK住,从而防止了数据重复。
      

  6.   

    里面一般需要个同步机制的表,当期线程使用的序列号在更新之前,其他线程等待状态。
    举个例子:
    http://blog.csdn.net/zhazhuzhao/article/details/7708362
      

  7.   

    我哪个时间参数 是根据不同的时间获取不同的最大ID,比如第一个用户调用的时候,传进来的时间参数是
    ‘2012-06-06‘,获取最大的SPE_ID是1 第一个用户调用的时候,传进来的时间参数是‘2012-06-07‘,获取最大的SPE_ID也是5,那么下次在传入参数’2012-06-07‘的时候,SPE_ID最大值为6。
    如果传入的是‘2012-06-06’的话,值就是2。我用JAVA开了3个线程调用,就会出现重复数据,因为并发获取到了同一个最大值。