我现在遇到的问题提如下:有一个任务派发的系统,一个任务有任务编码(主键)和其他信息并且有子,每个用户进入进行一个任务派发的时候,系统会自动根据日期生成一个编码,但编码的后五位是从1依次往上垒加的,如2008102100001这是第一个,后面的就应该是2008102100002,2008102100003....,并且在生成这些编码之前都是根据数据库中已有编码的值来进行计算的,比如数据库中已经有了最大编码2008102100009,这个时候如果有用户进系统进行任务的派发,那么他在派任务的页面所能看到的是2008102100010,这是不管有多上个用户进来派任务,他们所看到的编码都是2008102100010(当然如果由用户已经保存了编码2008102100010的话那就是2008102100011啦),这样就存在一个并发的问题,就是同时会有N多用户派的任务都是2008102100010,当然可以在他们保存的时候再从数据库中去比一下然后改变保存时的编码,我现在也是这么做的,但还是会出现并发的问题,而且要是两个用户同时保存同一个编码的任务时会产生进程冲突,各位大虾,能不能给出出招啊,怎么能更好的解决呢???先谢了!!

解决方案 »

  1.   

    参考贴子
    http://topic.csdn.net/u/20080807/17/73CC9C20-1FD8-4807-B9F4-590593C5A2FB.html
      

  2.   

    可以用自增长列来做.
    他肯定是唯一的.
    用他来生成你们的编号,取出一个编号出来后生成你要的编号(格式化的)比如你可以单独建一个表,里边就放一个自增字段,每次生成编号就往这个表中insert一条数据,然后用SCOPE_IDENTITY()取出这个值,然后把他格式化成你要的编号
    如果是oracle中可以用序列来解决这个问题.很容易解决.sql server自增自段应该也没问题
      

  3.   

    恩,这样也不失为一个办法,现在还有个问题就是我在选子的时候也是根据编码来存的,这样就会存在当多个用户进入派发不同任务时,当不同的用户选了不同的子后发现所选的子在每个任务中都存在,也就是,A用户进入这时任务编码是2008102200001,他选了子m,n;这时B用户也进来了,他的任务编码也是2008102200001,他选了子h,f;这时A再去看他所选的子却发现多了子h,f,B也发现多了子m,n,这个怎么办,我现在有个想法就是当每个用户进入任务派发的时候用一个临时的东西存一个数量,当他刷新或退出任务派发时就在这个数上加一或减一然后根据这个数值来生成单号,这个数值就像一个用户计数器的值样的,这个怎么来实现呢???请各位大虾指教指教,拜托啦,呵呵