Wycofywanie transakcji w przypadku błędu
Pierwszego dnia pracy dostałeś zadanie skonfigurowania transakcji, które rejestrują przelewy pieniędzy w banku.
Chcesz przygotować prosty skrypt, w którym 100 $ jest przelewane z account_id = 1 na account_id = 5. Następnie skrypt rejestruje te operacje w tabeli transactions. Wydaje ci się, że wszystko napisałeś poprawnie – ale jako ostrożny pracownik wolisz to sprawdzić!
Okazuje się, że jednak popełniłeś błąd. Zamiast wstawić nową transakcję dla konta 5, zrobiłeś to dla konta 500, które nie istnieje.
Aby zapobiec podobnym błędom w przyszłości, skrypt powinien wycofywać wszystkie zmiany w razie wystąpienia błędu. Jeśli wszystko przebiegnie poprawnie, transakcja powinna zostać zatwierdzona.
To ćwiczenie jest częścią kursu
Transakcje i obsługa błędów w SQL Server
Instrukcje do ćwiczenia
- Rozpocznij transakcję.
- Popraw błąd w operacji.
- Zatwierdź transakcję, jeśli nie wystąpiły żadne błędy.
- Wewnątrz bloku
CATCHwycofaj transakcję.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
BEGIN TRY
-- Begin the transaction
BEGIN ___;
UPDATE accounts SET current_balance = current_balance - 100 WHERE account_id = 1;
INSERT INTO transactions VALUES (1, -100, GETDATE());
UPDATE accounts SET current_balance = current_balance + 100 WHERE account_id = 5;
-- Correct it
INSERT INTO transactions VALUES (500, 100, GETDATE());
-- Commit the transaction
___ TRAN;
END TRY
BEGIN CATCH
SELECT 'Rolling back the transaction';
-- Rollback the transaction
___ ___;
END CATCH