Ошибка передачи SQL-сервера приложению - PullRequest
1 голос
/ 03 февраля 2010

Мне нужно передать ошибку в приложение. Я написал хранимые процедуры, как показано ниже: Это передает ошибку в приложение, или мы должны сделать что-то еще?

Например.

create procedure insert_emp 
as
  begin try
       begin tran
         insert into emp values(..........)
       commit;
   end try

   begin catch
     if @@trancount > 0
     rollback
     declare @errMessage varchar(2000),
     declare @errNumber int
     select @errMessage = error_message(), @errNumber = error_number()
     raiserror(@errMessage, @errNumber,1)
   end catch

Если мне нужно передать 0, если ошибки нет, и номер ошибки, если была ошибка, как это сделать с помощью raiserror? Как мы можем записать ошибку в error_table, используя raiserror? Более важно может выше, например. передать ошибку в приложение?

Ответы [ 2 ]

1 голос
/ 03 февраля 2010

Не пропустите raiserror(@errMessage, @errNumber,1). Аргументами для RAISERROR являются идентификатор сообщения, серьезность , состояние. Вы передаете @errNumber для серьезность , что неверно.

Вместо этого следует вызвать пользовательскую ошибку и передать информацию об обнаруженной исключительной ситуации в сообщении об ошибке при вставке формата сообщения:

RAISERROR(N'insert_emp: Error %i: %s', 16, 1, @errNumber, @errMessage);

Вы должны использовать уровень серьезности 16 для ошибок, которые вы хотите вызвать SqlException при обработке на стороне клиента (или другое исключение, в соответствии с используемой технологией доступа клиента).

Вы должны использовать уровень серьезности 1 для информационных сообщений.

1 голос
/ 03 февраля 2010

RAISERROR передаст ошибку клиенту.

Если вы хотите зарегистрировать ошибку в базе данных, сначала сделайте это в области catch, а затем вызовите raiserror.

Если вы не хотите передавать ошибку клиенту (я работал в компаниях, которые предпочитают возвращать коды ошибок), тогда вместо вызова raiserror вы можете просто вернуть ненулевое значение из процедуры, например это:

RETURN -1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...