当前位置: 代码迷 >> Sql Server >> 关于@@ERROR判断,该怎么处理
  详细解决方案

关于@@ERROR判断,该怎么处理

热度:47   发布时间:2016-04-24 09:38:22.0
关于@@ERROR判断
我再存储过程中这样写:
INSERT INTO A
SELECT *
FROM A1 (NOLOCK)
IF @@ERROR <> 0
BEGIN
 SELECT @errCode = 898989 ,@errMsg = 'AAAAAA!'
 GOTO ERROR
END

ERROR:
SELECT @errCode ,@errMsg 

假设我主键重复,为什么不是执行  ERROR:中的结果 而是直接报错主键重复!我用的是SQL2008!

------解决思路----------------------
在程序中,捕捉到未处理的错误,会直接跳出

@@error还是有用的,可以根据错误编号进行处理
BEGIN TRY
INSERT INTO A
SELECT *
FROM A1 (NOLOCK)
END TRY
BEGIN CATCH
IF @@ERROR = 2627
BEGIN
SELECT @errCode = 2627 ,@errMsg = '主键重复!'
END
END CATCH

------解决思路----------------------
goto要这样用
DECLARE @errCode INT,@errMsg NVARCHAR(200)
BEGIN TRAN
INSERT INTO A
SELECT *
FROM A1 (NOLOCK)
IF @@ERROR <> 0
BEGIN
 SELECT @errCode = 898989 ,@errMsg = 'AAAAAA!'
 GOTO ERROR
END

Success:
COMMIT TRAN
RETURN

ERROR:
SELECT @errCode ,@errMsg 
ROLLBACK TRAN
  相关解决方案