数据库存储过程死锁问题,请有类似经验者帮忙解决!

njtlxm 2003-12-30 09:39:00
SQL 2000数据库,有一个存储过程,这个存储过程对同一张表进行先后进行Insert和update操作.存储过程结构简述如下:
声明变量
开始事务
对其他表操作
Insert表A
Update 表A Where....
提交事务

在应用程序中,调用结构简述如下:

先提取大约80条记录,
开始事务

循环开始
每条记录执行一次上述的存储过程
循环结束

提交事务

如果在应用程序中只开启一个线程,则没有问题,如果同时开启四个线程,则肯定出现操作不成功的情况.

这几天的测试及排除操作如下:

1 在应用程序中如果在循环体外面不开启事务,则可以多线程成功操作.但是由于实际应用是用PB开发的,PB一打开窗体就是创建事务,没有办法取消.

2 在存储过程中将Update语句或者Insert语句的任意一个注销,也可以成功操作.但是如果两个一起执行则必死无疑

为什么?请各位帮忙解决

...全文
167 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
leimin 2003-12-31
  • 打赏
  • 举报
回复
声明变量

SET XACT_ABORT ON

开始事务

对其他表操作
begin tran 1
Insert表A
commit tran 1
begin tran 2
Update 表A Where....
commit tran 2

提交事务
progress99 2003-12-30
  • 打赏
  • 举报
回复
建議在事務中的處理盡可能的短
njtlxm 2003-12-30
  • 打赏
  • 举报
回复
我刚才想了想,也有可能不是死锁,因为我在多线程中调用该存储过程中不是无限等待,而是返回错误,就是"execute 存储过程"这个语句执行不成功
w_rose 2003-12-30
  • 打赏
  • 举报
回复
窗体是什么呀?我要知道!
w_rose 2003-12-30
  • 打赏
  • 举报
回复
PB一打开窗体就是创建事务,没有办法取消
-----------------------------------------
PB这么烂么?!窗体是什么呀?你打开窗体和关闭窗体之间的时间能控制在几秒钟之内么?
swordmanli 2003-12-30
  • 打赏
  • 举报
回复
说的没问题
那写的肯定有问题
DST_good 2003-12-30
  • 打赏
  • 举报
回复
声明变量
开始事务
对其他表操作
Insert表A
提交事务
开始事务
Update 表A Where....
提交事务
这样写看行不行啊


weixxxp 2003-12-30
  • 打赏
  • 举报
回复
应该不是死锁!但你的代码没贴出来,所以没法看出是什么原因!
zjcxc 2003-12-30
  • 打赏
  • 举报
回复
最好将存储过程贴出来看看.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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