想问一下。为什么在SQL2000的存储过程里面用WHILE循环有时候会出错。。以下是原代码

k886 2008-12-10 02:00:02
下面这个代码很怪异的是如果同时只有一个人在运行这个程序的话不会出现错误的情况,可是只要人一多过1个就有可能发生运行过程中存储过程整个出错的情况。。
@odrf_rowversion 定义为rowversion 类型,其它变量为整型。就是不知道它为什么会发生崩溃的情况,那位大虾知道的说声。另我是把这段程序放在游标的循环中的。
while @write_s<>0 and @write_i<40000
begin
select @odrf_rowversion=odrf_rowversion ,@write_s=odrf_writes from table_odrf where odrf_no=@sl_prdname
if @write_s=0
begin
update table_odrf set odrf_writes=1 where odrf_rowversion=@odrf_rowversion
select @rowi=@@rowcount
if @rowi<>0
set @write_i=40000
else
set @write_s=1

end
else
begin

set @write_s=1
end
set @write_i=@write_i+1


end
...全文
197 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
k886 2008-12-13
  • 打赏
  • 举报
回复
郁闷得很。存储过程出错了就直接结束事务了。。。
现在我把容易出错那段代码给放到另一个存储过程里面就可以了。结帖了。。
  • 打赏
  • 举报
回复
update table_odrf set odrf_writes=1 where odrf_rowversion=@odrf_rowversion
每个人对表进行更新的时候,sql会进行加锁。那么其他的可能就运行不成。
没有看到错误是什么,先看看是不是这个原因
hyde100 2008-12-10
  • 打赏
  • 举报
回复
应该是存在同时更新操作的问题吧
将这段程序用事务来做
k886 2008-12-10
  • 打赏
  • 举报
回复
我用事务来控制结果一出错它虽然做出了反应,但也跳出了循环结束了整个存储过程
至于加锁的问题。我还得测试一下。

27,579

社区成员

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

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