乐观并发检查失败。

hunren 2012-01-12 12:59:53

declare @赔率 numeric(18,10),
declare @游戏期号 int,
declare @表名1 varchar(10),
declare @表名2 varchar(10)

set @sqlstr='update '+ @表名2 +' set 获得金币=' + @表名2 + '.投注金币 * '+ @赔率 +' where 期号='+cast(@游戏期号 as varchar(10))
exec sp_executesql @sqlstr

set @sqlstr='update u set u.coin=u.coin + @表名2.获得金币,u.sorce=u.sorce
+
case when not EXISTS(select id from '+ cast(@表名1 as varchar(10)) +' where @表名1.uid=u.userid) then
case when getcoin - betcoin >=1000 and getcoin - betcoin<10000 then
1
when getcoin - betcoin >=10000 and getcoin - betcoin <50000 then
2
when getcoin - betcoin >=50000 then
3
else
0
end
else
0
end
,u.sorce2=u.sorce2+(
--此处还有一个case when....
)
from u inner join '+ cast(@表名2 as varchar(10)) +' on u.userid=@表名2.uid where @表名2.期号=' + cast(@游戏期号 as varchar(10))
exec sp_executesql @sqlstr


这是一个游戏的开奖程序,U是用户表,@表名2是游戏的投注记录表("@表名2"可能是篮球、足球等任何表结构都一样的游戏)
现在的问题是这段程序偶尔会报错:“乐观并发检查失败。已在此游标之外修改了该行。”,请教应该怎么处理呢?
...全文
159 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hunren 2012-01-14
  • 打赏
  • 举报
回复
意思是这里对U表的修改导致了另一段程序中使用的记录集或者游标对U表的修改失败吗?
但是这段程序为什么没有执行成功呢?
SQL77 2012-01-12
  • 打赏
  • 举报
回复
报错是游标..你检查执行了哪个游标,意思说你游标读取的数据已被别人更改了
唐诗三百首 2012-01-12
  • 打赏
  • 举报
回复
检查一下前端程序adodb recordset的执行参数,用默认的试试.

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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