SQL Server:检索存储过程错误并使用它们

时间:2019-02-19 03:40:15

标签: sql sql-server tsql stored-procedures sql-server-2016

我正在尝试从其他存储过程中获取错误。

例如,用户正在尝试将重复的产品ID添加到表中;这将失败,并将引发重复的键错误。如果用户尝试插入NULL,它也会失败。

如何获取这些错误并进行识别,以便可以使用该错误显示其他错误消息?我知道我可以将错误放在输出参数上,但是我不知道如何识别发生哪个错误。

使用SQL Server 2016

1 个答案:

答案 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