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.
- Jak jawnie podnosić błędy w SQL serverze?
- błąd wywołania przy użyciu instrukcji RAISERROR w SQL Server
- błąd wywołania przy użyciu instrukcji throw w SQL Server
- Jaka jest różnica między funkcją RAISERROR a instrukcją throw?
- zrozumienie instrukcji RaiseError z opcją Log.
- 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.,
- Instrukcja Raiserror
- 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.