jak jawnie podnosić błędy w SQL Server

powrót do: samouczek SQL Server dla początkujących i profesjonalistów

jak jawnie podnosić błędy w SQL Server

w tym artykule omówię sposób jawnego podnoszenia błędów w SQL Server z kilkoma przykładami, a także omówimy różne opcje, które możemy użyć z RAISERROR w SQL Server., Przeczytaj nasz poprzedni artykuł, w którym omówiliśmy przykład w czasie rzeczywistym funkcji systemu podnoszenia błędów. W ramach tego artykułu omówimy następujące wskazówki.

  1. Jak jawnie podnosić błędy w SQL serverze?
  2. błąd wywołania przy użyciu instrukcji RAISERROR w SQL Server
  3. błąd wywołania przy użyciu instrukcji throw w SQL Server
  4. Jaka jest różnica między funkcją RAISERROR a instrukcją throw?
  5. zrozumienie instrukcji RaiseError z opcją Log.
  6. Jak zgłaszać błędy, zapisując komunikat o błędzie w tabeli SysMessage.,
jak jawnie podnosić błędy w SQL serverze?

ogólnie, błędy popełniane w programie z predefiniowanych powodów, takich jak dzielenie liczby przez zero, naruszenie klucza głównego, naruszenie check, naruszenie integralności odniesienia, itp. Ale jeśli chcemy, możemy również wywołać błąd w Twoich programach na dwa różne sposoby.,

  1. Instrukcja Raiserror
  2. Instrukcja throw (nowa funkcja SQL Server 2012)

składnia Raiserror: RAISERROR (errorid/errormsg, SEVERITY, state)

składnia throw: throw errorid, Errormsg, State

przykład: Raise Error using RAISERROR statement in SQL Server.

w następującej procedurze składowanej zgłaszamy błąd, gdy dzielenie wynosi 1, używając instrukcji RAISERROR.,

przykład wykonania: EXEC spDivideBy1 10, 1

przykład: wywołanie błędu przy użyciu polecenia throw w SQL Server.

powyższą procedurę można również przepisać za pomocą instrukcji throw zamiast Raiserror w następujący sposób.,

wykonanie: EXEC spDivideBy2 10, 1

Jaka jest różnica między funkcją RAISERROR a instrukcją throw?

jeśli użyjemy którejkolwiek z dwóch instrukcji w programie do wywołania błędu bez try and catch blocks, Instrukcja RAISERROR po wywołaniu błędu nadal będzie kontynuowała wykonywanie programu, podczas gdy instrukcja throw zakończy program nieprawidłowo w tej linii., Ale jeśli są one używane w try block oba będą zachowywać się w ten sam sposób, który jest będzie skakać bezpośrednio do catch block skąd błąd został podniesiony.

Instrukcja RAISERROR daje możliwość określenia wagi Komunikatu o błędzie, podczas gdy nie mamy tej opcji w przypadku instrukcji throw, gdzie wszystkie komunikaty o błędach będą miały domyślną wagę 16.,

w przypadku RAISERROR istnieje szansa na zapisanie Komunikatu o błędzie do pliku dziennika serwera za pomocą opcji with log, podczas gdy nie możemy tego zrobić w przypadku instrukcji throw.

w przypadku throw, musimy określić zarówno errorid, jak i Komunikat o błędzie, aby wywołać błąd, podczas gdy w przypadku RAISERROR możemy podać id lub wiadomość., Jeśli id nie jest określony, domyślnym id błędu jest 50000, ale jeśli chcemy najpierw podać tylko ID błędu, musimy dodać komunikat o błędzie w tabeli sysmessage poprzez podanie unikalnego id do tabeli.

opcje z instrukcją RAISERROR:

z logiem: za pomocą tej opcji w instrukcji RAISERROR możemy nagrać komunikat o błędzie w pliku dziennika SQL Server tak, że jeśli błędy są fatalne administrator bazy danych może zająć się naprawą tych błędów.,

jeśli waga błędu jest większa niż 20, podanie opcji z logiem jest obowiązkowe. Aby przetestować tę zmianę procedury SPDIVIDEBY1 zmieniając instrukcję raiserror w następujący sposób

RAISERROR (’dzielnik nie może być jeden', 16, 1) z logiem

poniżej znajduje się pełna procedura

wykonaj teraz procedurę i gdy podany błąd powoduje, że możemy obserwować komunikaty o błędach zapisane w pliku dziennika SQL Server. Aby wyświetlić plik dziennika., W object explorer przejdź do węzła management node SQL Server log node i otwórz bieżący plik dziennika, klikając go dwukrotnie, jak pokazano poniżej.,g

RAISERROR (’liczba %d nie może być podzielona przez %d',16, 1, @No1, @No2)z logiem

zgłaszanie błędów zapisując komunikat o błędzie w tabeli sysmessage:

możemy zgłaszać błąd bez podawania komunikatu o błędzie w instrukcji RAISERROR, ale zamiast komunikatu o błędzie potrzebujemy określić identyfikator błędu i aby określić identyfikator błędu, musimy nagrać ten identyfikator błędu z Komunikatem o błędzie w tabeli SYSMESSAGE za pomocą zdefiniowanej przez system procedury „sp_addmessage”., 16, 'podziel przez jeden napotkany błąd'

teraz zmień procedurę, zmieniając instrukcję RAISERROR w następujący sposób

RAISERROR (51000,16, 1)z logiem

usuwanie komunikatów o błędach z tabeli sysmessages:

składnia: sp_dropmessage <identyfikator błędu>

przykład: Exec sp_dropmessage 51000

w następnym artykule omówię implementację try-catch w SQL Server, aby obsłużyć błąd w SQL Server., Tutaj, w tym artykule, staram się wyjaśnić, jak podnieść błędy jawnie w SQL Server krok po kroku z niektórych przykładów.

Leave a Comment