SQL的意外错误捕获问题

starwang 2003-04-02 10:33:30
请教在SqlServer中有没有对意外错误的捕获语句,
类似于oracle的Exception
在整个存储过程中,无论哪里出现错误,都会跳转到Exception之后的错误处理。
我找了好久,都没找到!
...全文
34 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leimin 2003-04-02
  • 打赏
  • 举报
回复
PLS TRY

SET XACT_ABORT ON
GO
...
DECALRE @RC INT
SELECT @RC=@@ERROR
IF @RC<>0 THEN.....


DJMPH 2003-04-02
  • 打赏
  • 举报
回复
同意 leimin(黄山光明顶)
但是如果在使用SET XACT_ABORT ON以后,再
SELECT @RC=@@ERROR
IF @RC<>0 THEN
ROLLBACK TRAN
是不可能执行的,因为出错的同时就ROLLBACK并且不往下继续了。
leimin 2003-04-02
  • 打赏
  • 举报
回复
MSSQL SERVER 默认SET XACT_ABORT OFF
这样在INSERT INTO....语句错误之后,会继续执行UPDATE,只是ROLLBACK INSERT的操作。
如果SET XACT_ABORT ON
这样在INSERT INTO....语句错误之后,不会继续执行UPDATE,只是ROLLBACK 全部的事务。

:-)
starwang 2003-04-02
  • 打赏
  • 举报
回复
我的意思是如果有多条语句,难道需要在每一个后面都加这样的判断吗?
比如
DECALRE @RC INT
BEGIN TRAN

INSERT INTO TABLENAME(....)VALUES(...)

UPDATE Tablename (....)

SELECT @RC=@@ERROR
IF @RC<>0 THEN
ROLLBACK TRAN
ELSE
COMMIT TRAN

如果第一个insert 语句出了问题,会走到if判断吗?
leimin 2003-04-02
  • 打赏
  • 举报
回复
@@error是SQL SERVER的一个整数的全局变量,返回当前的ERROR MESSAGE.

比如
DECALRE @RC INT
BEGIN TRAN
INSERT INTO TABLENAME(....)VALUES(...)
SELECT @RC=@@ERROR
IF @RC<>0 THEN ROLLBACK TRAN
ELSE COMMIT TRAN

starwang 2003-04-02
  • 打赏
  • 举报
回复
怎么是这样的,是不是在中间的任何代码出错,
都会走到
SELECT @RC=@@ERROR
IF @RC<>0 THEN..... 这里吗?
还是只对上一条语句有效?

22,209

社区成员

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

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