多用户并发重复单号的问题??

msony 2008-07-30 09:18:53
一个标准的网络版进销存,将使用各种单据,我采用邹建在SQL_server2000中实列中的编号方法,做了一段各单据自动编号的语句,但是在使用中客户反映还是才生的重复的单号,我想让大家看看,是不是SQL语句中写的有问题:

CREATE PROC P_NextBH
@Name char(3),
@BH nvarchar(20) OUTPUT
AS
BEGIN TRAN
if @Name='YJD'
begin
Update DHsystem WITH(ROWLOCK) SET @BH=YJD+1, YJD=YJD+1
end

if @Name='CYD'
begin
Update DHsystem WITH(ROWLOCK) SET @BH=CYD+1, CYD=CYD+1
end

if @Name='QYD'
begin
Update DHsystem WITH(ROWLOCK) SET @BH=QYD+1, QYD=QYD+1
end

if @Name='RKD'
begin
Update DHsystem WITH(ROWLOCK) SET @BH=RKD+1, RKD=RKD+1
end

if @Name='LYD'
begin
Update DHsystem WITH(ROWLOCK) SET @BH=LYD+1, LYD=LYD+1
end

if @Name='PSD'
begin
Update DHsystem WITH(ROWLOCK) SET @BH=PSD+1,PSD=PSD+1
end

COMMIT TRAN

GO
单号是采用一个专门的表,
RKD QYD YJD PSD
10000 10000 10000 10000 .................
按照不同的单据进行单号加1,而且采用的锁,这样也会产生重单号。
...全文
284 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenxinba 2008-08-01
  • 打赏
  • 举报
回复
Mysql的锁应该怎么用
wada0880 2008-08-01
  • 打赏
  • 举报
回复
我覺得應該是在存儲的時刻去產生編號,這樣就不會重復
ks2000 2008-07-30
  • 打赏
  • 举报
回复
要是我就每一类的唯一值就专门用一张表,直接添加更新就得到一个唯一值,还不会因为有人要一个QYD,把另一个要PSD的也锁住了,代码什么的也变得非常的简单,虽然看上去不那么专业,却是完全不会出问题,也更有效率。
msony 2008-07-30
  • 打赏
  • 举报
回复
大哥能解释详细点吗,小弟愚钝!
中国风 2008-07-30
  • 打赏
  • 举报
回复
表里只有一条数据..
默认情况下已经是行版本控制,用于select的时候可加上ROWLOCK

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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