请高手指教呀,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提交想写在哪里都行呀?不明白呀,请高手指教
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提交想写在哪里都行呀?不明白呀,请高手指教
...全文
相关推荐
SQL Server 2000 存储过程与XML编程
在SQL Server 2000中,存储过程支持输入、输出参数,甚至可以返回多个结果集。此外,还支持事务管理,使得在一组操作中实现数据的原子性和一致性成为可能。
hiberate SQL Server 2000 存储过程.pdf
标题与描述中的关键词“hibernate SQL Server 2000 存储过程”指出了本文档的主题,即在Hibernate框架下如何与SQL Server 2000的存储过程进行交互。
SQL Server 2000存储过程手册
《SQL Server 2000存储过程手册》是一本针对SQL Server 2000数据库管理系统中存储过程的详尽指南。
SQL2000 Server 存储过程例子
在SQL Server 2000中,存储过程是预编译的SQL语句集合,它是一种数据库对象,用于封装一组数据库操作,以便重复使用和提高性能。
SQL2000 事务回滚问题探讨
在SQL Server 2000中,事务管理是数据库操作的核心组成部分,确保数据的一致性和完整性。


疑难问题
