SQL的意外错误捕获问题

starwang 2003-04-02 10:33:30
请教在SqlServer中有没有对意外错误的捕获语句,
类似于oracle的Exception
在整个存储过程中,无论哪里出现错误,都会跳转到Exception之后的错误处理。
我找了好久,都没找到!
...全文
9 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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..... 这里吗?
还是只对上一条语句有效?
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

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