数据库存储过程并发问题

开玛莎拉吉的皮老板 2016-07-18 02:08:42
业务:发奖品(把奖品分配给某个人)。
存储过程:每次查询奖品表中,判断该人是否已经被分配,如果已经分配,就直接返回,如果没有分配,就更新奖品表进行分配。

问题:经常出现多个奖品分配给一个人的情况。就是说判断被跳过。
SN表中UNAME有多个重复的。

部分SQL如下:
USERS:用户表,SN:奖品表
begin tran t1
SELECT @UNAME=UNAME FROM USERS WHERE ID=@USERID--查询出当前人姓名
IF NOT EXISTS(SELECT 1 FROM SN WHERE SSTATE=1 AND UNAME=@UNAME)--判断这个人是否领过奖,sstate=1就是领奖了.
BEGIN
SELECT TOP 1 @SNID=ID FROM SN WHERE SSTATE=0 --查询出一条没有被领取过的奖品ID
UPDATE SN SET SSTATE=1,UNAME=@UNAME,time1=GETDATE() WHERE ID=@SNID --分配给该人
END
ELSE
BEGIN
SET @CODE=104 --您已经成功获奖
RETURN
END
commit tran t1


...全文
127 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
已解决。还是SQL代码有问题,有两个地方更新,去掉了一个。
shoppo0505 2016-07-18
  • 打赏
  • 举报
回复
引用 3 楼 klf8520 的回复:
[quote=引用 1 楼 shoppo0505 的回复:] UPDATE SN SET SSTATE=1,UNAME=@UNAME,time1=GETDATE() WHERE ID=@SNID AND SSTATE=0
试了 没用。 [/quote] 那就不清楚了,信息太少,帮不到你了
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
不要胡乱编代码。 在写代码之前,自己好好想想,想好了再开始动手写代码。
请问是有什么问题吗?这个过程不是我写的,不过我看了业务很简单啊,逻辑也没什么错误。实在不行我要自己仿写一份,只访业务不访代码。也许就能发现问题。
  • 打赏
  • 举报
回复
引用 1 楼 shoppo0505 的回复:
UPDATE SN SET SSTATE=1,UNAME=@UNAME,time1=GETDATE() WHERE ID=@SNID AND SSTATE=0
试了 没用。
  • 打赏
  • 举报
回复
不要胡乱编代码。 在写代码之前,自己好好想想,想好了再开始动手写代码。
shoppo0505 2016-07-18
  • 打赏
  • 举报
回复
UPDATE SN SET SSTATE=1,UNAME=@UNAME,time1=GETDATE() WHERE ID=@SNID AND SSTATE=0

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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