2016-08-03 17 views
0

我想記錄錯誤輸入數據格式引起的錯誤,例如。當有數字字段時輸入字母等。存儲過程中的錯誤處理在輸入格式錯誤的情況下

但是不知怎的,我不能記錄那個錯誤,我不明白我在哪裏犯錯誤。請任何人都可以幫助我。

樣本過程

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; 

輸入年齡字段爲「AV」 在這種情況下,我得到的消息,但沒有錯誤記錄。

消息8114,級別16,狀態5,過程p_set_OPD_Registration 47行
錯誤數據類型爲varchar轉換爲數字。

請幫我解釋一下這樣的錯誤。

任何幫助將不勝感激。謝謝!

回答

0

在您的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,這一定會失敗......

,您可以定義參數爲字符串類型並做驗證後,相應的投...

+0

感謝您的回覆。 – user4221591