【问题标题】:SQL Server : retrieving stored procedure errors and use themSQL Server:检索存储过程错误并使用它们
【发布时间】:2019-02-19 03:40:14
【问题描述】:

我正在尝试从不同的存储过程中获取错误。

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

如何获取这些错误并识别它们,以便我可以使用该错误来显示不同的错误消息?我知道我可以将错误放在输出参数上,但我不知道如何确定发生了哪个错误。

使用 SQL Server 2016

【问题讨论】:

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


    【解决方案1】:

    您可以使用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 或再次使用THROW 生成相同的错误-生成一些您的自定义THROW 51000, 'My Custom error message.', 1;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 2018-10-04
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      相关资源
      最近更新 更多