Чем отличается инструкция THROW от RAISERROR в T-SQL (Microsoft SQL Server)

Приветствую всех посетителей сайта Info-Comp.ru! Сегодня мы с Вами поговорим о том, чем же отличается инструкция THROW от инструкции RAISERROR в языке T-SQL, который используется в Microsoft SQL Server.

Для наглядности мы сформируем итоговую таблицу отличий.

Чем отличается инструкция THROW от RAISERROR в T-SQL (Microsoft SQL Server)

Инструкции THROW и RAISERROR в языке T-SQL

В языке T-SQL, как и в других языках программирования, есть возможность отслеживать, перехватывать и обрабатывать ошибки, которые могут возникнуть в процессе выполнения SQL инструкций.

Заметка! Visual Studio Code (VS Code) для разработки на Transact-SQL.

К конструкциям, которые позволяют нам отслеживать и обрабатывать ошибки, можно отнести:

  • TRY…CATCH
  • RAISERROR
  • THROW

Если конструкция TRY…CATCH предназначена для перехвата ошибок в коде, то инструкции RAISERROR и THROW предназначены для создания сообщений об ошибках, т.е. они выполняют примерно одинаковую функцию.

Однако, у многих может возникнуть вопрос, а чем они отличаются? А эти отличия на самом деле есть, и мы их сейчас рассмотрим.

Функция RAISERROR

RAISERROR – это системная функция, позволяющая создавать сообщение об ошибке и возвращать его как сообщение об ошибке сервера вызывающему приложению.

С помощью RAISERROR мы можем сослаться на уже определенное сообщение, которое находится в системном представлении sys.messages, либо самостоятельно динамически создавать сообщение.

Пример использования RAISERROR

   
   RAISERROR('Возникла ошибка!', 16, 1);

Скриншот 1

Инструкция THROW

THROW – инструкция, которая вызывает исключение и передает выполнение блоку CATCH конструкции TRY…CATCH.

Пример использования THROW

   
   THROW 51000, 'Возникло исключение!', 1;

Скриншот 2

Заметка! Чем отличаются функции от хранимых процедур в T-SQL.

Отличия инструкции THROW от RAISERROR

Давайте перейдем к рассмотрению основных отличный инструкции THROW от RAISERROR, а чтобы было более наглядно, сделаем это в виде таблицы.

RAISERROR THROW
Если передается номер ошибки, то идентификатор этой ошибки должен быть определен в системном представлении sys.messages В данном случае номер ошибки не требуется определять в системном представлении sys.messages
Есть параметр, который указывает уровень серьезности ошибки Параметр для указания уровня серьезности отсутствует. В THROW уровень серьезности всегда равен 16
Если передается текст ошибки, то он может содержать стили форматирования, аналогично формату, используемому в функции printf В данном случае параметр с текстом ошибки не может принимать форматирование стиля printf
Не учитывает SET XACT_ABORT Учитывает SET XACT_ABORT

Заметка! Курсы по Transact-SQL для начинающих.

Вот мы с Вами и рассмотрели основные отличия инструкции THROW от RAISERROR.

Обязательно стоит отметить, что в новых приложениях рекомендуется использовать инструкцию THROW вместо RAISERROR.

На сегодня это все, надеюсь, материал был Вам полезен, пока!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.