Когда фиксировать транзакцию, а когда выполнять откат
Банк, в котором вы работаете, решил начислить по 100 долларов на счета с балансом менее 5 000 долларов. Однако директор банка хочет провести эту операцию только в том случае, если таких счетов не более 200.
Вы готовите скрипт для начисления этих 100 долларов. Из нескольких возможных подходов вы выбираете следующий: открываете транзакцию и обновляете все счета с балансом менее 5 000 долларов. Затем с помощью функции @@ROWCOUNT проверяете количество затронутых строк. Если оно превышает 200 — выполняете откат транзакции. В противном случае — фиксируете её.
Как составить такой скрипт?
Это упражнение является частью курса
Транзакции и обработка ошибок в SQL Server
Инструкции к упражнению
- Начните транзакцию.
- Проверьте, превышает ли количество затронутых строк 200.
- Выполните откат транзакции, если количество затронутых строк больше 200.
- Зафиксируйте транзакцию, если количество затронутых строк не превышает 200.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
-- Begin the transaction
___ ___;
UPDATE accounts set current_balance = current_balance + 100
WHERE current_balance < 5000;
-- Check number of affected rows
IF @@ROWCOUNT > ___
BEGIN
-- Rollback the transaction
___ ___;
SELECT 'More accounts than expected. Rolling back';
END
ELSE
BEGIN
-- Commit the transaction
___ ___;
SELECT 'Updates commited';
END