CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

高分求教sql事务的问题

楼主maohaibin(永不言弃)2005-06-02 11:37:39 在 MS-SQL Server / 应用实例 提问

有一订单表T_Order,里面订单编号字段OrderID在存储过程里面自动生成,生成规则如下:搜索订单表里当前最大订单编号(全为数字,不包含字母等其他字符),如当前最大订单为‘100001’,则自动生成订单编号为‘100002’依次类推。  
          现有多台机器同时下单,保存订单的存储过程如下:  
   
  CREATE   PROCEDURE   P_Order   @ID   nvarchar(50),@OrderID   nvarchar(50)  
  AS    
  begin   tran   SetProperties  
  (此处自动生成订单编号)  
  (此出INSERT记录到订单表)  
  if   @@error   <>   0   GOTO   Err_Handler   commit   tran   SetProperties   Return     Err_Handler:   rollback   tran   SetProperties   Return  
  GO  
   
          现出现这样的问题:订单编号是不允许有重复的(但我没将其设成主键),可是多台机器同时下单时出现了重单的记录!分析应该是机器A在生成订单编号后,机器B已经将该订单编号的记录给INSERT进去了。  
          请问有没有什么好办法可以解决这一问题!是否可以在事务里面进行处理呢??   谢谢!!  
  问题点数:50、回复次数:7Top

1 楼fengfangfang()回复于 2005-06-02 11:46:57 得分 0

加锁Top

2 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-06-02 11:49:15 得分 10

将订单编号定义为主键或者唯一索引列,或者将该字段创建为identity()属性列,让数据库自动维护定单号的递增。Top

3 楼maohaibin(永不言弃)回复于 2005-06-02 13:25:06 得分 0

将订单定义为主键后,当要插入重单时,系统就会报错了,行不通!让数据库自动维护订单号的递增也不可能,因为我在这里将订单号的生成规则简单化了,真正的生成规则是这样的:前六位数字是开单日期   如:050602     后四位数字为递增部分     合起来的订单形式就为:0506020001、0506020002、050602003等   然后到了6月3号开的单就会从     06030001开始递增了Top

4 楼BeShrek(今晚打老虎)回复于 2005-06-02 13:41:32 得分 0

加锁Top

5 楼quhaihua(七太保)回复于 2005-08-15 21:20:43 得分 10

begin   tran    
  declare   @rel   int  
  exec   @rel   =   sp_getapplock   @Resource='Form1',  
                                                      @LockMode   ='Shared'  
  commit   tran  
   
  加锁Top

6 楼netcoder(朱二)回复于 2005-08-15 21:39:13 得分 10

设置唯一约束或者主键约束  
  怎么会行不通呢,数据库本来就应该这么设计的  
  就是要系统报错,然后重新生成定单编号Top

7 楼snowwolf613(苦行僧)回复于 2005-08-16 11:14:32 得分 20

我也遇到過這個問題﹐不知你的訂單會不會有刪除﹐需要取斷優先嗎。  
  我的編碼規則如     maohaibin(永不言弃)   所說﹐同時還增加了字母排頭﹐是用個表來記錄其尾數每次產生單號﹐以尾數參與計算﹐產生完還未返回調用前端時即Update尾數﹐這樣﹐再怎么多人操作也不會取重復值Top

相关问题

  • BDE对SQL Server的事务缺陷,高手请进,100分奉上
  • 急,急,急!!!!关于MS SQL SERVER 2000的事务,关系到小弟饭碗的问题。。高分求助,
  • 急:关于分布式事务处理的问题-----SQL方面的高手请进!
  • C#+SQL Sever 可以实现分布式事务处理吗?
  • 在sql server使用事务
  • 高手捡分, 事务的完整性
  • 高分求救db2的事务问题!!!
  • 大家使用哪种事务模型:SQL事务,ADO事务,COM+事务?
  • 关于asp中处理sql 事务处理问题? 具有价值给分!
  • 如何在ASP中实现对SQL Server的事务处理?(就这点分了)

关键词

  • 数据库
  • 数字
  • 订单
  • 生成
  • 递增
  • tran
  • 机器
  • 键
  • 编号
  • 尾數

得分解答快速导航

  • 帖主:maohaibin
  • libin_ftsafe
  • quhaihua
  • netcoder
  • snowwolf613

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo