日期:2014-05-17  浏览次数:20461 次

关于SQL存储过程的疑问
[code=Java]
  while   (bool)   {
                        if   (st   <=   wbl.getNuberPrint())   {
                                try   {
                                        Thread.sleep(2000);
                                }   catch   (InterruptedException   e)   {
                                        //   TODO   Auto-generated   catch   block
                                        e.printStackTrace();
                                }

                                st++;
                              long   BagSerialNumber   =   manage.getBagNum(new   Date());//从数据库表1中取出当天计数字段的值
                              lableEntity.setSerialNumber(BagSerialNumber+1);//计数的值加1后存入对象
                        bool   =   InsertBagUpdate(lableEntity);//调用存储过程写入数据库表1,存储过程返回值与预期一致的话返true
                              }
                              if   (st   ==   wbl.getNuberPrint())   {
                             
                                      break;
                                      }
                    }
[/code]

上面是我的代码的一部分,现在的问题是实际使用中,一个月总有几次出现当天插入的值出现重复,我想请教下存储过程实际执行中会不会有延迟,导致我紧接着查询时出现没有查询到最新值的问题?还有最好怎么写才能避免此类问题,是用sql语句直接写更好吗?     次存储过程中只有插入表值的操作
谢谢

------解决方案--------------------
不要先獲取,然後在程序中更新,直接調用一次程序,在數據庫中更新時獲取序列號並更新
------解决方案--------------------
并发情况下,这个控制是不足的,总有时间差,唯一的方法是锁

在存储过程实现
开事务
取出当天计数字段的值(并加锁)
插入数据
提交事务

这样才能控制

------解决方案--------------------
SQL code

SET XACT_ABORT ON

BEGIN TRANSACTION

--计算相应数据

--插入数据

COMMIT TRANSACTION