我正在尝试从其他存储过程中获取错误。
例如,用户正在尝试将重复的产品ID添加到表中;这将失败,并将引发重复的键错误。如果用户尝试插入NULL
,它也会失败。
如何获取这些错误并进行识别,以便可以使用该错误显示其他错误消息?我知道我可以将错误放在输出参数上,但是我不知道如何识别发生哪个错误。
使用SQL Server 2016
答案 0 :(得分:3)
您可以使用TRY CATCH块来处理错误。通常,您可以使用以下模板:
BEGIN TRY
BEGIN TRANSACTION;
-- CODE BLOCK GOES HERE
COMMIT TRANSACTION;
END TRY
BEGIN CATCH;
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION;
END;
-- GET ERRORS DETAILS OR THROW ERROR
END CATCH;
如果您不使用TRANSACTION
,它将看起来像这样:
BEGIN TRY
-- CODE BLOCK GOES HERE
END TRY
BEGIN CATCH;
-- GET ERRORS DETAILS OR THROW ERROR
END CATCH;
在CATCH
块中,您可以使用一些内置函数来获取错误详细信息。例如:
BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO
然后,基于此详细信息,您可以执行某些操作(记录错误,不执行任何操作,将错误详细信息保存在变量中,并将其传递给外部例程,使用THROW或再次使用{{ 1}}-生成一些您的自定义THROW
。