Проверка @@TRANCOUNT в конструкции TRY...CATCH
Владелец счёта 10 выиграл в лотерею и получит $200. Вы готовите простой скрипт, чтобы добавить эти $200 к current_balance счёта 10. Кажется, всё написано верно, но вы решаете проверить код ещё раз.
Выясняется, что при начислении денег была допущена ошибка: SET current_balance = 'current_balance' + 200. Вы указали 'current_balance' как строку, что вызывает ошибку.
Скрипт должен откатывать все изменения при возникновении ошибки — с проверкой наличия открытой транзакции. Если всё проходит успешно, транзакцию следует зафиксировать, также предварительно проверив наличие открытой транзакции.
Это упражнение является частью курса
Транзакции и обработка ошибок в SQL Server
Инструкции к упражнению
- Начните транзакцию.
- Исправьте ошибку в операции.
- Внутри блока
TRYпроверьте наличие транзакции и зафиксируйте её. - Внутри блока
CATCHпроверьте наличие транзакции и выполните откат.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
BEGIN TRY
-- Begin the transaction
___ ___;
-- Correct the mistake
UPDATE accounts SET current_balance = 'current_balance' + 200
WHERE account_id = 10;
-- Check if there is a transaction
IF ___ > 0
-- Commit the transaction
___ ___;
SELECT * FROM accounts
WHERE account_id = 10;
END TRY
BEGIN CATCH
SELECT 'Rolling back the transaction';
-- Check if there is a transaction
IF ___ > 0
-- Rollback the transaction
___ ___;
END CATCH