事务疑难杂症,求版主速解

山寨DBA 2013-12-19 03:17:02
我创建的存储过程如下:
create procedure [dbo].[Pr_MobileGame_SendPrize](
@Description varchar(250), ---发放奖品缘由描述
@game_id varchar(50), ---游戏id
@prize_qty varchar(50), --奖品数量
@prize_desc varchar(200) --奖品详细信息
)
as
begin
set nocount on

declare @error int
declare @time int --发奖时间

begin transaction

set @error=0
select @time=DATEDIFF(S,'1970-01-01',GETDATE())-8*3600

INSERT INTO dbo.t_message_test20131219
(userid, recv_userid, msg_type, game_id, area_id, title, content, attachment, send_time, status, recv_game_id, recv_area_id, isread, roleid)
SELECT
0,
userid,
107, @game_id,
'',
@Description,
@prize_qty,
@prize_desc,
@time,
0,
@game_id,
'',
0,
''
FROM
dbo.t_user_game nolock
WHERE
game_id=@game_id

set @error=@@ERROR

if @error<>0
begin
rollback transaction

insert into dbo.Log_Pr_MobileGame_SendPrize
select '0',@time,@Description,@game_id,@prize_qty,@prize_desc

return -1
end
else
begin
insert into dbo.Log_Pr_MobileGame_SendPrize
select '1',@time,@Description,@game_id,@prize_qty,@prize_desc

return 1
end
commit transaction
end

使用下面的实例调用:
declare @Description varchar(250),@game_id varchar(50),@prize_qty varchar(50),@prize_desc varchar(200)
select @description='测试发奖', ---发放奖品缘由描述
@game_id='project_mg', ---游戏id
@prize_qty='5|1000', --奖品数量
@prize_desc='Energy|5|Money|1000' --奖品详细信息

exec dbo.Pr_MobileGame_SendPrize
@Description,
@game_id,
@prize_qty,
@prize_desc

却报如下错误,请版主帮我看看怎么回事:
...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
山寨DBA 2013-12-19
  • 打赏
  • 举报
回复
commit transaction 应该放在else后面的begin和end之间。
山寨DBA 2013-12-19
  • 打赏
  • 举报
回复
此问题已经搞定了,谢谢

22,209

社区成员

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

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