社区
DataWindow
帖子详情
流水号重复
叔到用时方恨嫂
2011-09-30 09:34:02
系统'保存'按钮事件里,通过sql语句获取max(预送单号),在其基础上加1,得到新的预送单号,现在系统有10几个人用,有时候同时‘保存’时会出现预送单号重复问题。有什么好的方法解决?
...全文
589
15
打赏
收藏
流水号重复
系统'保存'按钮事件里,通过sql语句获取max(预送单号),在其基础上加1,得到新的预送单号,现在系统有10几个人用,有时候同时‘保存’时会出现预送单号重复问题。有什么好的方法解决?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
builderlzp
2011-10-09
打赏
举报
回复
提前取号不就是了,取号不用作废
丫丫的小脚丫
2011-10-08
打赏
举报
回复
[Quote=引用 9 楼 xiaobn_cn 的回复:]
引用 6 楼 hefeng2011 的回复:
表已经有了自增列,想写个存储过程来控制。
这个解决方案要看你用的是什么数据库系统。
oracle:
定义一个预送单号的序列,使用该序列生成预送单号,可以保证并发时不会取重。
sql server:
将预送单号列设为自增列,由数据库自动维护该列的值。
[/Quote]
一般都是这方法
yingmu
2011-10-08
打赏
举报
回复
最简单的处理:每个用户端加个台号,自己生成自己的,呵呵。
jksby
2011-10-04
打赏
举报
回复
(1)在保存按钮中使用max+1获取最大号,保存,如果这个事务执行快,大并发量也不会重复。如果事务慢,你可以显式begin transaction,然后获取最大号,然后commit。
或者(2)数据库预送单号设计成自增序列
Cideason
2011-10-02
打赏
举报
回复
[Quote=引用 8 楼 qin_phoenix 的回复:]
有几百人同时使用的系统,使用这种办法,好像也没有遇到取号重复的问题啊!
[/Quote]
???? 什么方法?分享一下~~~
Cideason
2011-10-02
打赏
举报
回复
~~流水号重复主要原因是:
多用户提交或同时提交,因时间差的问题,存在还未提交成功的数据,
解决此问题:
关键是 取 多事务未提交成功数据+已经提交的数据(则是脏读)
如 :
sybase :
select max(sendno) from t_sendtable where 1=1 at isolation read uncommitted
MS SQL Server :
select max(sendno) from t_sendtable with(nolock) where 1=1
.
.
.
意思就是对流水号取值的表 脏读(未提交成功数据+已经提交的数据)取出对应的数据
这样 取出的数据做流水号跳号则不会重复的问题~~~~~~~~~~~
////////////////
qin_phoenix
2011-09-30
打赏
举报
回复
有几百人同时使用的系统,使用这种办法,好像也没有遇到取号重复的问题啊!
tqsxp
2011-09-30
打赏
举报
回复
新增单号表,每个提交用户都在表栏位的值上加1就ok了
叔到用时方恨嫂
2011-09-30
打赏
举报
回复
表已经有了自增列,想写个存储过程来控制。
Samoon
2011-09-30
打赏
举报
回复
新号是在update的时候才生成的么?如果是的话,在这么短的传输时间内都能“同时”提交的话确实只能交给数据库处理了。用触发器或者带直接传带计算的sql给数据库。
yyoinge
2011-09-30
打赏
举报
回复
也可以用触发器来实现
yyoinge
2011-09-30
打赏
举报
回复
这种最好用自增列来控制,或者用专门的表来存储当前max单号值,然后通过锁表的方式取号
叔到用时方恨嫂
2011-09-30
打赏
举报
回复
csdn来大姨妈了,发的技术帖子竟然404了。
叔到用时方恨嫂
2011-09-30
打赏
举报
回复
csdn来大姨妈了,发的技术帖子竟然404了。
xiaobn_cn
2011-09-30
打赏
举报
回复
[Quote=引用 6 楼 hefeng2011 的回复:]
表已经有了自增列,想写个存储过程来控制。
[/Quote]
这个解决方案要看你用的是什么数据库系统。
oracle:
定义一个预送单号的序列,使用该序列生成预送单号,可以保证并发时不会取重。
sql server:
将预送单号列设为自增列,由数据库自动维护该列的值。
其它数据库就不知道了,如果数据库不支持类似的功能可以采用以下方案自定义自增列:
1. 生成1个自增序列的表serial_table,表的结构为serial_name与serial_no
2. 插入记录,serial_name = 'ysdh',serial_no = 1 (如果不是从1开始就使用初始值)
3. 在需要生成预送单号的位置使用以下代码来获取序列号:
// 生成新的序列号并锁定
update serial_table set serial_no = serial_no + 1;
select serial_no into :ll_serialno from serial_table where serial_name = 'ysdh';
如果要使用存储过程取序列号得看你用的什么数据库,去相关板块学下怎么写存储过程就可以了,这个逻辑很简单的。
流水号
重复
竟然导致了一次生产事故
一次因
流水号
重复
导致的生产事故,揭示了批量业务处理中的潜在风险。事故涉及
流水号
生成规则不合理,导致
流水号
耗尽后重置,进而引发下游系统接口调用失败。
如何防止线上事故?从一次
流水号
重复
引发的故障说起
一次因
流水号
重复
导致的生产事故,揭示了系统设计缺陷。事故源于批量业务处理中
流水号
生成规则不当,导致
流水号
耗尽并
重复
,影响下游系统。通过修改
流水号
生成规则,增加自增序列长度,解决了问题。
解决
流水号
重复
的简单方法
本文探讨了
流水号
重复
的原因及解决方案,重点介绍了如何通过脏读取未提交事务数据来避免
流水号
重复
,提供了Sybase与MSSQL Server两种环境下具体的SQL实现。
好坑,
流水号
重复
竟然导致了一次生产事故!
一次因
流水号
重复
导致的生产事故,揭示了
流水号
生成规则的重要性。事故发生在批量业务处理过程中,由于
流水号
资源耗尽并
重复
生成,造成下游系统调用失败。
条码打印软件如何做到
流水号
防
重复
打印?
本文介绍如何利用Labelmx条码打印软件的打印后更新数据功能,确保
流水号
条码在每次打印后自动递增,避免
重复
。通过新建标签,设置
流水号
条码和打印数量,每次打印都会更新起始数据,实现
流水号
的连续且不
重复
。
DataWindow
611
社区成员
20,469
社区内容
发帖
与我相关
我的任务
DataWindow
PowerBuilder DataWindow
复制链接
扫一扫
分享
社区描述
PowerBuilder DataWindow
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章