Skip to main content

Używanie TRY ... CATCH do obsługi błędów SQL Server

Revealing the True Donald Trump: A Devastating Indictment of His Business & Life (2016) (Czerwiec 2026)

Revealing the True Donald Trump: A Devastating Indictment of His Business & Life (2016) (Czerwiec 2026)
Anonim

Instrukcja TRY … CATCH w języku Transact-SQL wykrywa i obsługuje warunki błędów w aplikacjach bazodanowych. To stwierdzenie jest podstawą obsługi błędów SQL Server i jest ważną częścią tworzenia solidnych aplikacji bazodanowych. TRY … CATCH ma zastosowanie do SQL Server począwszy od 2008, Azure SQL Database, Azure SQL Data Warehouse i Parallel Data Warehouse.

Przedstawiamy TRY … CATCH

WYPRÓBUJ … Poł. Działa, umożliwiając wybranie dwóch instrukcji Transact-SQL: jednego, który chcesz "wypróbować", a drugiego, aby "złapać" wszelkie błędy, które mogą się pojawić. Gdy SQL Server napotka instrukcję TRY … CATCH, natychmiast wykonuje instrukcję zawartą w klauzuli TRY. Jeśli instrukcja TRY zostanie pomyślnie wykonana, SQL Server zacznie działać. Jeśli jednak instrukcja TRY generuje błąd, SQL Server wykonuje instrukcję CATCH, aby z wdzięcznością obsłużyć błąd.

Podstawowa składnia przyjmuje tę postać:

BEGIN TRY blok instrukcji END TRYROZPOCZNIJ POŁOWĘsql_statementEND CATCH ;

WYPRÓBUJ … PRZYKŁAD Przykład

Łatwo zrozumieć użycie tego stwierdzenia na przykładzie. Wyobraź sobie, że jesteś administratorem bazy danych zasobów ludzkich, która zawiera tabelę o nazwie "Pracownicy", która zawiera informacje o każdym z pracowników w Twojej organizacji. W tej tabeli jako klucz podstawowy jest używany numer identyfikacyjny pracownika. Możesz spróbować użyć poniższego polecenia, aby wstawić nowego pracownika do bazy danych:

INSERT INTO pracowników (identyfikator, imię, nazwisko, rozszerzenie)WARTOŚCI (12497, "Mike", "Chapple", 4201)

W normalnych okolicznościach to oświadczenie doda wiersz do tabeli Pracownicy. Jeśli jednak pracownik o identyfikatorze 12497 już istnieje w bazie danych, wstawienie tego wiersza naruszyłoby ograniczenie klucza podstawowego i spowoduje następujący błąd:

Msg 2627, Level 14, State 1, Line 1Naruszenie ograniczenia PRIMARY KEY 'PK_employee_id'. Nie można wstawić duplikatu klucza do obiektu "dbo.employees".Oświadczenie zostało wypowiedziane.

Ten błąd zawiera informacje potrzebne do rozwiązania problemu, ale występują w nim dwa problemy. Po pierwsze, wiadomość jest tajemnicza. Zawiera kody błędów, numery linii i inne informacje, które są niezrozumiałe dla przeciętnego użytkownika. Po drugie, co ważniejsze, powoduje, że oświadczenie zostało przerwane i może spowodować awarię aplikacji.Alternatywą jest zawijanie instrukcji w instrukcji TRY … CATCH, jak pokazano tutaj:

BEGIN TRYINSERT INTO pracowników (identyfikator, imię, nazwisko, rozszerzenie)WARTOŚCI (12497, "Mike", "Chapple", 4201)END TRYROZPOCZNIJ POŁOWĘPRINT 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Mail pracownika',@recipients = '[email protected]',@body = 'Wystąpił błąd podczas tworzenia nowego rekordu pracownika.',@subject = 'Błąd duplikatu ID pracownika ";END CATCH

W tym przykładzie wszelkie występujące błędy są zgłaszane zarówno użytkownikowi wykonującemu polecenie, jak i adresowi e-mail [email protected]. Błąd wyświetlany użytkownikowi:

Błąd: Naruszenie ograniczenia klucza podstawowego "PK_employee_id". Nie można wstawić duplikatu klucza do obiektu "dbo.employees".Poczta w kolejce.

Realizacja aplikacji przebiega normalnie, pozwalając programistowi na obsługę błędu. Używanie instrukcji TRY … CATCH jest eleganckim sposobem proaktywnego wykrywania i obsługi błędów występujących w aplikacjach baz danych SQL Server.

Uczyć się więcej

Jeśli chcesz dowiedzieć się więcej o Structured Query Language, sprawdź Wprowadzenie do SQL.