Sprawdzanie @@TRANCOUNT w konstrukcji TRY...CATCH
Właściciel konta numer 10 wygrał loterię i otrzymuje nagrodę w wysokości 200 USD. Przygotowujesz prosty skrypt, który doda te 200 USD do kolumny current_balance dla konta 10. Wydaje ci się, że wszystko napisano poprawnie, ale wolisz jeszcze raz sprawdzić swój kod.
Okazuje się, że popełniono błąd podczas dodawania kwoty: SET current_balance = 'current_balance' + 200. Wartość 'current_balance' została zapisana jako ciąg znaków zamiast nazwy kolumny – to powoduje błąd.
Tworzony skrypt powinien wycofywać wszystkie zmiany w razie błędu, sprawdzając przy tym, czy istnieje otwarta transakcja. Jeśli wszystko przebiegnie pomyślnie, transakcja powinna zostać zatwierdzona – również z weryfikacją, czy transakcja jest otwarta.
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.
- Wewnątrz bloku
TRYsprawdź, czy istnieje otwarta transakcja, i zatwierdź ją. - Wewnątrz bloku
CATCHsprawdź, czy istnieje otwarta transakcja, i wycofaj ją.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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