我正在尝试从不同的存储过程中获取错误。
例如,用户尝试将重复的产品 ID 添加到表中;这将失败并且会引发重复键错误。如果用户尝试插入NULL
,也会失败。
如何获取这些错误并识别它们,以便我可以使用该错误来显示不同的错误消息?我知道我可以将错误放在输出参数上,但我不知道如何识别发生了哪个错误。
使用 SQL Server 2016
最佳答案
您可以使用TRY CATCH block 来处理错误。一般来说,您可以使用以下模板:
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
block 中,您可以使用一些内置函数获取错误详细信息。例如:
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 生成相同的错误,或再次使用 THROW
- 生成一些您的自定义THROW 51000, 'My Custom error message.', 1;
.
关于SQL Server : retrieving stored procedure errors and use them,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54758521/