w instrukcji online dla skryptu tworzącego TSQLTutorJoins przykładowa baza danych z moich wcześniejszych kolumn, polecam użycie osql.exe, aby uruchomić skrypt z wiersza polecenia. Aby zademonstrować dlaczego, oparłem kolumnę tego miesiąca na RAISERROR i fajnej sztuczce, której nauczyłem się o użyciu parametru state instrukcji RAISERROR. Używając specjalnej wartości parametru RAISERROR state, możesz wymusić zakończenie złożonego skryptu i zapobiec jego wykonaniu w niewłaściwej bazie danych.,
RAISERROR ma trzy podstawowe składniki: tekst błędu, nasilenie i stan. Tekst błędu może być albo zakodowaną na twardo lub sparametryzowaną wiadomością, albo numerem błędu ze stałej wiadomości zdefiniowanej przez użytkownika. Aby utworzyć własne stałe wiadomości, zobacz SQL Server Books Online (Bol) o tym, jak korzystać z systemowej procedury składowanej sp_addmessage.
ma kilka zdefiniowanych poziomów. Błędy zdefiniowane przez programistów mają nasilenie od 1 do 16, przy czym 16 jest najczęstszym i domyślnym. Jednak nie wszystkie ciężary działają w ten sam sposób., Tabela 1 pokazuje kategorie dotkliwości, sposób wyświetlania komunikatów w analizatorze zapytań oraz sposób ich opcjonalnego logowania w dzienniku aplikacji przeglądarki zdarzeń. Aby zapisać wiadomości do przeglądarki zdarzeń, możesz użyć instrukcji LOG in RAISERROR lub utworzyć stałą wiadomość za pomocą sp_addmessage z parametrem with_log ustawionym na 'TRUE'. Ta ostatnia opcja zapisze każde wystąpienie tego błędu do dziennika aplikacji przeglądarki zdarzeń, nawet jeśli RAISERROR nie jest określony za pomocą dziennika., Uproszczona składnia RAISERROR to
RAISERROR (error, severity, state) WITH LOG
na przykład
RAISERROR ('Test Severity 16', 16, 1) WITH LOG
zwraca następujący błąd do okna wiadomości w analizatorze zapytań:
Error Number InfoServer: Msg 50000, Level 16, State 1, Line 1Error Text Test Severity 16
pierwsza linia to informacja o numerze błędu, jak opisuje Tabela 1. Analizator zapytań nie wyświetla tych informacji dla stopnia ważności 10. Kolor wyświetlacza zmienia się z czarnego dla przejść od 1 do 9 na czerwony dla 11 i wyższych. Przykładowy skrypt w liście 1 pokazuje dodatkową składnię i pomysły na użycie RAISERROR, w tym używanie wielu języków i parametryzację., Aby uzyskać więcej informacji na temat używania RAISERROR i różnych obciążeń, zobacz BOL w następujących tematach: Komunikaty o błędach, poziomy nasilenia komunikatów o błędach, RAISERROR, używanie RAISERROR, FORMATMESSAGE i xp_logevent.
oprócz ważności, RAISERROR obsługuje również stan. Wiele skryptów tworzenia obiektów tworzy bazę danych, a następnie tabele, procedury itd. w nowo utworzonej bazie danych. Ale co jeśli skrypt nie stworzył poprawnie bazy danych? Wszystkie dodatkowe obiekty (np.,, tabele, procedury) zostaną utworzone w domyślnej bazie danych, która dla administratorów systemów może być master. Tworzenie wszystkich zdefiniowanych przez użytkownika obiektów bazy danych w głównej bazie danych jest dokładnie tym, czego nie chcesz, więc podczas tworzenia skryptów zautomatyzowanego procesu możesz podać wartość state, która zakończy skrypt, jeśli wystąpi fatalny (według twojej definicji) błąd.
jednak ustawienie wartości stanu nie zawsze wydaje się zakończyć sesję. Aplikacje, takie jak analizator zapytań, mogą automatycznie łączyć się ponownie po zerwaniu połączenia., Tak więc, aby w pełni zobaczyć zalety opcji state, musisz użyć narzędzia takiego jak osql.exe, który nie łączy się automatycznie po zerwaniu połączenia. Oto sposób na przetestowanie opcji state. W wierszu polecenia wpisz
osql -E -q"RAISERROR('Test Severity 16', 16, 1) WITH LOG"
Ten kod zwraca
Test Severity 161>
i pozostajesz w systemie osql.exe. Uruchomienie następującej linii z wiersza polecenia:
osql -E -q"RAISERROR('Test State 127', 16, 127) WITH LOG"
zwraca komunikat o błędzie
Test State 127
i zwraca wiersz polecenia, wychodzący z osql.exe. Jeśli używasz osql.,exe aby wywołać błąd ze stanem 127 po niepowodzeniu tworzenia bazy danych, stan błędu kończy połączenie, a w konsekwencji resztę skryptu, dzięki czemu nie tworzysz obiektów w niewłaściwej bazie danych.
na początku skryptu tworzenia bazy danych TSQLTutorJoins.sql, dostępny z linku „Pobierz kod” na górze strony, ma następujący kod:
Jeśli baza danych nie zostanie utworzona, połączenie zostanie przerwane i część skryptu do tworzenia obiektów nie zostanie uruchomiona. Ustawiłem go w ten sposób, aby umożliwić Ci określenie, jakie są błędy (np.,, brak miejsca na dysku, Nieprawidłowa ścieżka) przed wykonaniem pozostałej części skryptu. Bez tego kodu, jeśli tworzenie bazy danych nie powiedzie się i skrypt będzie kontynuowany, utworzy on wszystkie obiekty testowe w domyślnej bazie danych.
gdy automatyzujesz Skrypty, kończenie wykonania przy poważnym błędzie może być niezwykle przydatne. Zgłaszając błąd o dużej wadze, rejestrując go w dzienniku aplikacji przeglądarki zdarzeń i co ważniejsze, podnosząc go ze stanem 127, upewniasz się, że żadne obiekty skryptów nie zostaną utworzone w niewłaściwej bazie danych., Dodatkowo, rejestrując go w dzienniku aplikacji przeglądarki zdarzeń, masz ścieżkę audytu zdarzenia.