请高手指教呀,sql server 2000存储过程中关于事务的问题
请教高手们一个存储过程中关于事务处理的问题,存储过程如下:
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提交想写在哪里都行呀?不明白呀,请高手指教