首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于SQL存储过程的疑义

2012-10-09 
关于SQL存储过程的疑问[codeJava]while(bool){if(stwbl.getNuberPrint()){try{Thread.sleep(2000)}cat

关于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 ONBEGIN TRANSACTION--计算相应数据--插入数据COMMIT TRANSACTION 

热点排行