我单位物资系统:库存表kcb,库存明细kcmx
当发生一笔动态的时候,先查询库存表中的库存数量,然后加上增减数量,得到新库存,update,commit;
接着把库存数量,增减数量,更改时间分别插入到库存明细:前次数量,增减数量,更改时间。
问题:现在有两条数据更改时间很接近 a 10:51:47:01b 10:51:46:25 .也就是说两条数据先后更新,而且更新的是同样一笔物资。于是,a 条记录得到的前存数量和b条记录得到的前存数量一样,(好像叫读脏数?)于是记录b的更新就被当作不存在了!
系统在随后的更新中查到的是记录a更新候的数据,一切正常,唯有记录b 被忽略了;(于是库存错了,领导批了)
还有一个奇怪的问题,就是库存明细的查询是用存储过程作的,为什么select到pb的数据窗口之后别的数据都是按时间顺序排列,唯有上面两条,a在b之前!时间也会错?相差太近?
我以后怎么办?高人教我
---------------------------------------------------------------
如果没有发生意外,数据库里的数据一定不会错,看看你的应用吧
---------------------------------------------------------------
你把
select 库存 into 前次库存 from 库存表
...
insert into 库存表 ....
...
update ...
显式的bind到同一事务中即;
for i = 1 to 笔数
begin tran
select 库存 into 前次库存 from 库存表
if 没找到 then
//插入
begin tran
insert into 库存表 ....
commit tran;
else 找到了
begin tran
update 库存表...
commit tran;
end if
begin tran
insert into 库存明细 ...
commit tran;
commit tran
next