Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Какая существует практика правильности обработки ошибок  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
Добрый день.

Если учитывать тот факт, что вся бизнес логика находится на стороне БД, то "верхнее ПО" как то нужно информировать, что "что-то" пошло не так. Хранимые процедуры имеют результирующий код:

CREATE PROCEDURE [Test]
AS
...
...

RETURN @код_int
GO


Если подумать, то в самом простом применении данный код можно использовать как "0" - ошибок нет, "не 0" - некая ошибка. Если бизнес логика БД проверяет правильность входящих данных, то должно быть ещё и описание ошибки в том случае, если данные не прошли проверку. Для возвращение описания ошибки "верхнему ПО" в голову приходит "Print @описание_ошибки".

Могут быть ошибки при непосредственной модификации данных (insert/update/delete) связанные например с установленными ограничениями при создании таблиц. Такие ошибки можно отлавливать через:

BEGIN TRY
  ...
END TRY
BEGIN CATCH
  DECLARE @Error INT
  DECLARE @Message NVARCHAR(2048)
  DECLARE @ProcedureName NVARCHAR(126)
  SELECT @ERROR = ERROR_NUMBER(), @Message = ERROR_MESSAGE(), @ProcedureName = ERROR_PROCEDURE()
  RAISERROR(N'Error: %s, %i, %s', 1, 60, @ProcedureName, @Error, @Message) WITH LOG;
  RETURN @Error
END CATCH



Как по Вашему мнению, такой подходи отлова ошибок/предупреждений является правильным подходом? есть что-то, что в данном подходе можно улучшить? Возможно есть и другие способы, как можно уведомить "верхнее ПО" о наличии ошибок и предупреждений, очень буду признателен за советы, как это можно делать по другому и более правильней...
21 дек 18, 08:28    [21770208]     Ответить | Цитировать Сообщить модератору
 Re: Какая существует практика правильности обработки ошибок  [new]
aleks222
Member

Откуда:
Сообщений: 919
set xact_abort ON;
throw

наше фсе.
21 дек 18, 14:03    [21770477]     Ответить | Цитировать Сообщить модератору
 Re: Какая существует практика правильности обработки ошибок  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7651
Игорь_UUS,

а что с транзакциями делать? Вы пишете устаревший RAISERROR().

Существует механизм исключений в современных средствах разработки, его и надо использовать.
Если исключения приложением не могут быть обработаны в силу реализации средства разработки, то придется использовать код завершения. В некоторых случаях приложения должно "мягко" реагировать, тогда можно использовать код завершения.
Смотреть по требованиям.
21 дек 18, 14:03    [21770480]     Ответить | Цитировать Сообщить модератору
 Re: Какая существует практика правильности обработки ошибок  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7651
Игорь_UUS,

подумайте, например, как можно предоставить пользователю в понятной форме сообщения проверочных ограничений, нарушения ограничений уникальности и проверки внешнего ключа, если это требуется.
21 дек 18, 14:06    [21770485]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить