这样如何避免?

azsoft 2003-12-03 07:44:34
多人操作库存,如何避免保存时库存不足。
...全文
29 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
azsoft 2003-12-03
  • 打赏
  • 举报
回复
你上面的代码,在取库存值的时候,如何处理?

这样处理呢?

如:在库存表里建一个 ykc int 字段,下一个客户端在使用时就会去判断(sl-ykc)
也就是该客户端只能使用(sl-ykc)的值,然后保存到库存表里
现在有一个问题,在客户修改记录时 ykc的值也要响应增减,客户端多的情况下,
ykc 的值不好确定。
pengdali 2003-12-03
  • 打赏
  • 举报
回复
你这样

create table #锁表(编号 int)

--代码:
if exists(select 1 from 编号='你的编号')
return

insert #锁表 values('你的编号')

.....你处理的代码

delete #锁表 where 编号='你的编号'

这样不是更好。
azsoft 2003-12-03
  • 打赏
  • 举报
回复
不用锁定记录,如何实行呢。

比如 客户端再写入数据时,先批量存入临时表,然后在批量存入库存表时进行判断,
去掉临时表中的大于库存的值,返回结果再通知给客户端。

这样行吗?

pengdali 2003-12-03
  • 打赏
  • 举报
回复
1 如何锁一个表的某一行


A 连接中执行

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

begin tran

select * from tablename with (rowlock) where id=3

waitfor delay '00:00:05'

commit tran

B连接中如果执行

update tablename set colname='10' where id=3 --则要等待5秒

update tablename set colname='10' where id<>3 --可立即执行

2 锁定数据库的一个表

SELECT * FROM table WITH (HOLDLOCK)


注意: 锁定数据库的一个表的区别

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
pengdali 2003-12-03
  • 打赏
  • 举报
回复
create table #锁表(编号 int)

--代码:
if exists(select 1 from 编号='你的编号')
return

insert #锁表 values('你的编号')

.....你处理的代码

delete #锁表 where 编号='你的编号'
mlj-老马 2003-12-03
  • 打赏
  • 举报
回复
是说的库存数量吧, 设计修改库存数量时加上条件,如数量为qty, 则where qty-xxx(要减的值)>=0, 判断结果,没有修改记录则说明库存不足。
azsoft 2003-12-03
  • 打赏
  • 举报
回复
大力呢?

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧