-
Notifications
You must be signed in to change notification settings - Fork 2
37. Обработка ошибок в транзакциях
@@ERROR
- Возвращает номер ошибки для последней выполненной инструкции Transact-SQL. Возвращает 0, если в предыдущей инструкции Transact-SQL не возникли ошибки. Просмотреть текст, связанный с номером ошибки @@ERROR можно в sys.messages.
@@ROWCOUNT
- Возвращает число строк, затронутых при выполнении последней инструкции Transact-SQL.
@@TRANCOUNT
- Возвращает число инструкций BEGIN TRANSACTION, выполненных в текущем соединении.
BEGIN TRY
{ sql_statement | statement_block }
END TRY BEGIN CATCH
[ { sql_statement | statement_block } ] END CATCH
[;]
Реализация обработчика ошибок на языке Transact-SQL. В области блока CATCH для получения сведений об ошибке, приведшей к выполнению данного блока CATCH, можно использовать следующие системные функции:
-
ERROR_NUMBER()
возвращает номер ошибки. -
ERROR_SEVERITY()
возвращает степень серьезности ошибки. -
ERROR_STATE()
возвращает код состояния ошибки. -
ERROR_PROCEDURE()
возвращает имя хранимой процедуры или триггера, в котором произошла ошибка. -
ERROR_LINE()
возвращает номер строки, которая вызвала ошибку, внутри подпрограммы. -
ERROR_MESSAGE()
возвращает полный текст сообщения об ошибке. Текст содержит значения подставляемых параметров, таких как длина, имена объектов или время. -
XACT_STATE()
- Возвращает состояние транзакции текущего выполняемого запроса.- 1 Текущий запрос содержит активную пользовательскую транзакцию. Запрос может выполнять любые действия, включая запись данных и фиксирование транзакции.
- 0 У текущего запроса нет активной пользовательской транзакции.
- -1 В текущем запросе есть активная транзакция, однако произошла ошибка, из-за которой транзакция классифицируется как нефиксируемая. Запросу не удается зафиксировать транзакцию или выполнить откат до точки сохранения; можно только запросить полный откат транзакции. Запрос не может выполнить никакие операции записи, пока не будет проведен откат транзакции. До отката транзакции запрос может выполнять только операции считывания. После отката транзакции запросу будут доступны как операции считывания, так и операции записи, а также запуск новых транзакций. После завершения работы пакета компонент Database Engine автоматически выполнит откат любых активных нефиксируемых транзакций. Если при переходе транзакции в нефиксируемое состояние не было отправлено сообщение об ошибке, после завершения выполнения пакета сообщение об ошибке будет отправлено клиентскому приложению. Сообщение показывает, что обнаружены нефиксируемые транзакции и выполнен откат.
-
SET XACT_ABORT { ON | OFF }
- Указывает, выполняет ли SQL Server автоматический откат текущей транзакции, если инструкция языка Transact-SQL вызывает ошибку выполнения. Если выполнена инструкцияSET XACT_ABORT ON
и инструкция языка Transact-SQL вызывает ошибку, вся транзакция завершается и выполняется ее откат. Если выполнена инструкцияSET XACT_ABORT OFF
, в некоторых случаях выполняется откат только вызвавшей ошибку инструкции языка Transact-SQL, а обработка транзакции продолжается.