【问题标题】:error handling in stored procedure in case of wrong input format输入格式错误时存储过程中的错误处理
【发布时间】:2016-08-03 23:17:31
【问题描述】:

我正在尝试记录由错误的输入数据格式引起的错误,例如。当有数字字段等时输入字母。

但不知何故我无法记录那个错误,我不明白我在哪里做错了。谁能帮帮我。

示例程序

ALTER PROCEDURE [dbo].[p_set_OPD_Registration] (
    @name_pr VARCHAR(120)
    ,@age NUMERIC(20, 4)
    ,@v_out_result_num INT OUTPUT
    ,@v_out_result_msg VARCHAR(1000) OUTPUT
    )
AS
BEGIN
    BEGIN TRY
        INSERT INTO [dbo].[tbl_patient_registration] (
            [patient_id_pr]
            ,[name_pr]
            ,[age]
            ,[patient_address_1]
            )
        VALUES (
            '2937'
            ,@name_pr
            ,ISNUMERIC(@age)
            ,'test'
            )

        IF @@ROWCOUNT > 0
        BEGIN
            SET @v_out_result_num = 1;
        END
        ELSE
        BEGIN
            SET @v_out_result_num = 2;
        END
    END TRY

    BEGIN CATCH
        INSERT INTO [dbo].[z_sql_exceptional_error]
        VALUES (
            ERROR_NUMBER()
            ,ERROR_SEVERITY()
            ,ERROR_STATE()
            ,ERROR_PROCEDURE()
            ,ERROR_LINE()
            ,ERROR_MESSAGE()
            ,getdate()
            ,'person ID'
            );

        SET @v_out_result_num = 0;
        SET @v_out_result_msg = SUBSTRING(error_message(), 1, 500);
    END CATCH
END

当我对表做错事时,错误会正确记录在异常表中,例如:

ErrorID ErrorNumber ErrorSeverity   ErrorState  ErrorProcedure  ErrorLine   ErrorMessage    ErrorTime   ErrorDescription
1   8152    16  14  p_set_OPD_Registration  15  String or binary data would be truncated.   2016-08-03 19:05:53.550 person ID

但是当我将数字输入更改为字母时,我无法记录错误。我只是收到消息。例如。

declare @v_out_result_num int;
declare @v_out_result_msg  varchar(1000);
exec [dbo].[p_set_OPD_Registration] "testing", 'av', @v_out_result_num output, @v_out_result_msg output
select  @v_out_result_num , @v_out_result_msg; 

将 AGE 字段输入为“AV” 在这种情况下,我收到了消息,但没有错误记录。

消息 8114,级别 16,状态 5,程序 p_set_OPD_Registration,第 47 行
将数据类型 varchar 转换为数值时出错。

请帮助我如何记录此类错误。

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: sql-server stored-procedures error-handling


    【解决方案1】:

    在你的 SP 之上,你有这个

    ALTER PROCEDURE [dbo].[p_set_OPD_Registration] (
        @name_pr VARCHAR(120)
        ,@age NUMERIC(20, 4)
        ,@v_out_result_num INT OUTPUT
        ,@v_out_result_msg VARCHAR(1000) OUTPUT
        )
    

    参数@age定义为NUMERIC(20,4)

    当您尝试使用年龄的非数字值调用 SP 时,这一定会失败...

    您可以将参数定义为字符串类型并在验证后进行适当的转换...

    【讨论】:

    • 感谢您的回复。
    猜你喜欢
    • 2011-12-07
    • 1970-01-01
    • 2013-05-17
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多