CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

死锁不知道为什么

楼主liyiding23(代码人生)2006-02-10 17:23:01 在 MS-SQL Server / 疑难问题 提问

a事务   spid   58:Receive   'SN71333326','05CM14740','2015-1-1   0:00:00',1,'SH','SH037','SN-J-SH-2006-0064','2006-2-8   9:51:00','回收'  
   
  b处理   spid   53:select   validdate   from   productdetail   where   prod_code='SN71420102'   and   prod_batc='05DM01240'  
   
  日志提示是  
  A事务:ResType:LockOwner   Stype:'OR'   Mode:   X   SPID:53   ECID:4   Ec:(0x322EE0C0)   Value:0x2b354e20   Cost:(0/0)  
  B事务:ResType:LockOwner   Stype:'OR'   Mode:   IS   SPID:58   ECID:3   Ec:(0x3233E0C0)   Value:0x1ebf27e0   Cost:(0/0)  
   
  -----------------------------------------------------------  
  事务A内容  
  alter   proc   yiding_Receive   @pro_code   nvarchar(30),@lot_no   nvarchar(30),@expiry_date   smalldatetime,  
  @qty   float,@office   nvarchar(20),@cust_code   nvarchar(20),@ord_no   nvarchar(20),@del_date   smalldatetime,@status   nvarchar(20)  
  as  
  SET   XACT_ABORT   ON  
  begin   tran   t  
  declare   @id   bigint,@comp_code   nvarchar(20)  
   
  select   top   1   @id=id   from   productdetail   with   (updlock)     where   last_stat='送货'   and     last_code=@ord_no   and   prod_code=@pro_code   and   prod_batc=@lot_no   and   prod_qty=@qty  
   
  update   productdetail   with   (xlock)   set   cust_code=NULL,last_code=pre_code,last_stat=pre_stat     where   id=@id  
  update   officeproductstocklist   with   (xlock)   set   orde_qty=orde_qty-1     where     offi_code=@office   and     prod_code=@pro_code  
   
  if   @@error>0  
  rollback  
  commit   tran   t  
  SET   XACT_ABORT   OFF  
  问题点数:100、回复次数:5Top

1 楼pbsql(风云)回复于 2006-02-10 17:47:23 得分 10

把select与update合并为一句:  
  update   productdetail   with   (xlock)   set   cust_code=NULL,last_code=pre_code,last_stat=pre_stat  
      where   id   in(select   id   from   productdetail   where   last_stat='送货'   and     last_code=@ord_no   and   prod_code=@pro_code   and   prod_batc=@lot_no   and   prod_qty=@qty)  
  update   officeproductstocklist   with   (xlock)   set   orde_qty=orde_qty-1     where     offi_code=@office   and     prod_code=@pro_code  
  Top

2 楼Yang_(扬帆破浪)回复于 2006-02-11 08:06:43 得分 40

不要指定锁  
   
  特别是表锁Top

3 楼vovo2000(没人要的猫)回复于 2006-02-11 09:50:41 得分 0

提高隔离级别  
  SET   TRANSACTION   ISOLATION   LEVEL   REPEATABLE   READ  
  --   参考级别  
  --       {   READ   COMMITTED  
  --           |   READ   UNCOMMITTED  
  --           |   REPEATABLE   READ  
  --           |   SERIALIZABLE  
  --       }Top

4 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-02-11 14:45:50 得分 50

已经设置了SET   XACT_ABORT   ON  
  不要再指定对表的锁定Top

5 楼liyiding23(代码人生)回复于 2006-02-13 16:46:24 得分 0

这个死锁是什么意思,为什么会发生???不理解.Top

相关问题

  • ORACLE死锁为什么杀不掉?
  • 这样会不会死锁?
  • 我的表老要死锁,为什么?...绝望求救
  • 高手帮我看看为什么会死锁?
  • 死锁
  • 关于死锁的两道题.希望能告诉我为什么?
  • 在工作线程中更新用户界面为什么会产生死锁?
  • 从sql server中的报警日志可以都看到那些内容,能不能知道发生死锁的情况(求高手)
  • 这种情况是不是也是“死锁”了,如何解决?
  • 死锁后,ORACLE会不会自动解锁!

关键词

  • code
  • nvarchar
  • spid
  • 事务
  • sn
  • sh

得分解答快速导航

  • 帖主:liyiding23
  • pbsql
  • Yang_
  • wangtiecheng

相关链接

  • SQL Server类图书

广告也精彩

反馈

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