Роль оператора TRY заключается в захвате исключения. (Поскольку этот процесс обычно состоит из нескольких операторов, вместо «оператора TRY» обычно используется термин «блок TRY».) Если в блоке TRY происходит исключение, то часть системы, называемая обработчиком исключения, доставляет исключение другому часть программы, которая обработает исключение. Эта программная часть обозначается ключевым словом CATCH и поэтому называется блоком CATCH.
NOTE
Обработка исключений с использованием операторов TRY и CATCH - это обычный способ, которым современные языки программирования, такие как C# и Java обработка ошибок.
Обработка исключений с помощью блоков TRY и CATCH дает программисту множество преимуществ, таких как:
Exceptions provide a clean way to check for errors without cluttering code
Exceptions provide a mechanism to signal errors directly rather than using some side effects
Exceptions can be seen by the programmer and checked during the compilation process
SQL Server 2012 вводит третий оператор в отношении обработки ошибок: THROW. Этот оператор позволяет генерировать исключение, пойманное в блоке обработки исключений. Проще говоря, оператор THROW - это еще один механизм возврата, который ведет себя подобно уже описанному оператору RAISEERROR.
В примере 1 показано, как работает обработка исключений с помощью TRY / CATCH / THROW. В нем показано, как можно использовать обработку исключений для вставки всех операторов в пакет или для отката всей группы операторов в случае возникновения ошибки. Пример основан на ссылочной целостности между таблицами отделов и сотрудников. По этой причине необходимо создать обе таблицы с использованием ограничений PRIMARY KEY и FOREIGN KEY.
ПРИМЕР 1
0270_001
После выполнения пакета в Примере 1, все три оператора в пакете не будут выполнены вообще, и результат этого примера:
0271_001
Выполнение примера 1 работает следующим образом. Первый оператор INSERT выполнен успешно. Затем второе утверждение вызывает ошибку ссылочной целостности. Поскольку все три оператора записаны внутри блока TRY, исключение «выбрасывается», и обработчик исключения запускает блок CATCH. CATCH откатывает все операторы и печатает соответствующее сообщение. После этого оператор THROW возвращает выполнение пакета вызывающей стороне. По этой причине содержимое таблицы сотрудника не изменится.
ПРИМЕЧАНИЕ
Операторы BEGIN TRANSACTION, COMMIT TRANSACTION и ROLLBACK являются операторами Transact- SQL относительно транзакций. Эти операторы запускают, фиксируют и откатывают транзакции соответственно. См. Главу 13 для обсуждения этих утверждений и транзакций в целом.