我再存储过程中这样写:
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