难题,如何在SQLServer存储过程里实现异常捕获的出错处理?

zhg_best2000 2003-04-01 04:31:24
例如:
create proc test as
begin
begin tran
update xxxx .... <--这里出错
if @ERROR <> 0 begin <--标记A, 本想在这里能做一些出错处理
rollback tran
do something ...
end
end

本想在标记A处能做出错处理,但上一语句出异常后就直接退出,后面的if @ERROR判断语句根本不执行,我该怎么样捕获这个异常,就像高级语言的try ... catch ???


请高手不吝帮忙!
...全文
55 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhg_best2000 2003-04-01
caiyunxia(monkey) 的方法我也知道,问题是出了runtime error后,程序就不再往下执行了,再多的IF @@ERROR判断语句也没用,我就希望能找一个开关 实现on error resume next的功能,有希望找得到吗???

苦闷,难道要我用asp一条一条执行?

回复
caiyunxia 2003-04-01
begin transaction
.....
IF @@error <>0 goto QuitWithRollback

.....
IF @@error <>0 goto QuitWithRollback

commit transaction
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
回复
leimin 2003-04-01
create proc test as
begin
begin tran
update xxxx .... <--不要有RUNTIME ERROR
if @@ERROR <> 0 begin <--这里能做出错处理
rollback tran
do something ...
end
end


MS SQLSERVER无法返回RUNTIME ERROR,因为这是SQL SERVER的内部错误!
回复
cdshelf 2003-04-01
SQL Server 的错误机制是, @ERROR 返回的是最近的一个 SQL Statement 是否执行成功。本例中,@ERROR 捕获的是 update xxxx 这个 Statement 本身,而不是 update xxx 执行结果,所以,你需要检查 Update 以后,被 update 的表的最新数据来验证是否执行成功。

SQL Server 这种错误机制确实非常让人恼火。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2003-04-01 04:31
社区公告
暂无公告