请高手指教呀,sql server 2000存储过程中关于事务的问题

quielybb quielybb 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
请教高手们一个存储过程中关于事务处理的问题,存储过程如下:
create proc p_insert
(
@username varchar(50),
@address varchar(60),
@intro varchar(400),
@return_name varchar(50) output
)
as
set nocount on
declare @err int,@errcount int
set @errcount=0
LockTimeOutRetry:
if exists (select * from ad_vip where username=@username)
begin
begin tran
insert usertable
select @username,@address,@intro
set @err=@@error
if @err<>0
rollback tran
goto ErrorHandler
end
else
begin
set @return_name='用户名不存在'
return -100
end
commit tran
ErrorHandler:
if (@err=1222 or @err=1205) and @errcount=5
begin
raiserror('错误',16,1)
return -100
end
if @err=1222 or @err=1205
begin
waitfor delay '00:00:00.25'
set @errcount=@errcount+1
goto LockTimeOutRetry
end
go

现在的问题就是为什么我的commit tran写在现在的位置上就会报错,
错误提示是:EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 0,当前计数 = 1。

如果我要是把commit tran写到存储过程的最后面的go前面就没事呢?难道commit必须是存储过程语句中的最后一句吗?可以我看有些高手写的存储过程,commit提交想写在哪里都行呀?不明白呀,请高手指教
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
quielybb
疑难问题 22,298 成员 121,727 内容