很简单,你看看代码一目了然,放在现在位置,缺了begin tran和他配对,而放在最后是因为你的
goto语句转到上面了,没有执行到rollback tran所以才不报错.
goto语句转到上面了,没有执行到rollback tran所以才不报错.
解决方案 »
- 插入另一个表的一个查询结果集SQL语句怎么写,在线等...
- 应用程序与数据库连接问题?
- 如何设置实现:局域网内其它机器就可以访问我的共享文件夹,不能使用企业管理器注册、操作我的SQL Server?
- schema.ini文件不起作用!
- 怎样用sql语句实现递归查找父ID
- SQL2005同步的问题
- 请问哪里可以免费下载SQL Server 2000?
- 询复杂sql语句(急)
- 如何设计表的结构以及sql语句实现树的遍历
- 微软的VisualStudio可以连上(localdb)\v11.0,但是SqlServer management工具连不上
- ●如何删除master中的存储过程 adduser?
- 表、视图字段无故丢失,急请救援!
指定当 Transact-SQL 语句产生运行时错误时,Microsoft® SQL Server™ 是否自动回滚当前事务。详细信息,查看帮助联机
create proc p_insert
(
@username varchar(50),
@address varchar(60),
@intro varchar(400),
@return_name varchar(50) output
)
asset nocount onset xact_abort ondeclare @err int,@errcount int
set @errcount=0LockTimeOutRetry:if exists (select * from ad_vip where username=@username)
begin
begin tran
insert usertable
select @username,@address,@intro set @err=@@error
if @err<>0
begin
rollback tran
goto ErrorHandler
end
else
begin
commit tran
return 0
end
end
else
begin
set @return_name='用户名不存在'
return -100
end
ErrorHandler:
if (@err=1222 or @err=1205) and @errcount=5
begin
raiserror('错误',16,1)
return -100
endif @err=1222 or @err=1205
begin
waitfor delay '00:00:00.25'
set @errcount=@errcount+1
goto LockTimeOutRetry
endGO
--调用declare @ret int,@output varchar(1000)exec @ret=p_insert 'tom','Beijing','test',@output outputselect @ret,@output