2016-08-03 3 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; 

поле ввода AGE как «AV» В этом случае я получаю сообщение, но без регистрации ошибок.

Msg 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).

При попытке вызвать СП с нечисловым значением для возраста, это должно обязательно ...

Вы можете определить параметр как тип строки и сделать соответствующий бросок после валидаций ...

+0

Спасибо за ответ. – user4221591

Смежные вопросы