难题,如何在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 ???


请高手不吝帮忙!
...全文
85 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 这种错误机制确实非常让人恼火。

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧