Приветствую всех посетителей сайта Info-Comp.ru! Сегодня мы с Вами поговорим о том, чем же отличается инструкция 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);
Инструкция THROW
THROW – инструкция, которая вызывает исключение и передает выполнение блоку CATCH конструкции TRY…CATCH.
Пример использования THROW
THROW 51000, 'Возникло исключение!', 1;
Заметка! Чем отличаются функции от хранимых процедур в 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.
На сегодня это все, надеюсь, материал был Вам полезен, пока!