Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Какая существует практика правильности обработки ошибок / 4 сообщений из 4, страница 1 из 1
21.12.2018, 08:28
    #39751133
Игорь_UUS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая существует практика правильности обработки ошибок
Добрый день.

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE PROCEDURE [Test]
AS
...
...

RETURN @код_int
GO



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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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




Как по Вашему мнению, такой подходи отлова ошибок/предупреждений является правильным подходом? есть что-то, что в данном подходе можно улучшить? Возможно есть и другие способы, как можно уведомить "верхнее ПО" о наличии ошибок и предупреждений, очень буду признателен за советы, как это можно делать по другому и более правильней...
...
Рейтинг: 0 / 0
21.12.2018, 14:03
    #39751315
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая существует практика правильности обработки ошибок
Код: sql
1.
2.
set xact_abort ON;
throw


наше фсе.
...
Рейтинг: 0 / 0
21.12.2018, 14:03
    #39751318
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая существует практика правильности обработки ошибок
Игорь_UUS,

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

Существует механизм исключений в современных средствах разработки, его и надо использовать.
Если исключения приложением не могут быть обработаны в силу реализации средства разработки, то придется использовать код завершения. В некоторых случаях приложения должно "мягко" реагировать, тогда можно использовать код завершения.
Смотреть по требованиям.
...
Рейтинг: 0 / 0
21.12.2018, 14:06
    #39751322
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая существует практика правильности обработки ошибок
Игорь_UUS,

подумайте, например, как можно предоставить пользователю в понятной форме сообщения проверочных ограничений, нарушения ограничений уникальности и проверки внешнего ключа, если это требуется.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Какая существует практика правильности обработки ошибок / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]