RAISERROR (języka Transact-SQL)
Generuje komunikat o błędzie i inicjuje wystąpił błąd podczas przetwarzania w sesja.RAISERROR można albo odwołanie do wiadomości użytkownika przechowywane w sys.messages katalogu widoku lub tworzenia wiadomości dynamicznie.Wiadomość jest zwracana jako komunikat o błędzie programu serwera do aplikacji wywołującej lub skojarzone blok CATCH konstrukcja TRY…CATCH.
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]
Argumenty
msg_id
numer komunikatu do zdefiniowanej przez użytkownika błędów są przechowywane w sys.messages Widok katalogu używaniesp_addmessage.Błąd liczby komunikatów o błędach zdefiniowane przez użytkownika powinna być większa niż 50 000.Kiedy msg_id nie jest określony, RAISERROR wywołuje komunikat o błędzie z błędy o numerach 50 000.msg_str
Jest podobna do komunikat zdefiniowanej przez użytkownika z formatowaniem printf Funkcja w C biblioteki standardowej. Komunikat o błędzie może zawierać maksymalnie 2,047 znaków.Jeśli komunikat zawiera co najmniej 2048 znaków, są wyświetlane tylko pierwszy 2,044 i wielokropek jest dodawany do wskazania, że wiadomość została obcięta.Należy zauważyć, że parametrów podstawienia zajmują więcej znaków niż przedstawiono dane wyjściowe z powodu wewnętrznego przechowywania działania.Na przykład Podstawienie parametru %d z przypisaną wartość 2 faktycznie daje jeden znak w ciąg wiadomości, ale także wewnętrznie zajmuje trzy dodatkowe znaki magazynowania. To wymaganie magazynowania zmniejsza liczbę znaków dostępnych dla danych wyjściowych wiadomości.Kiedy msg_str jest określony, RAISERROR wywołuje komunikat o błędzie z błędy o numerach 50 000.
msg_str to ciąg znaków ze specyfikacjami opcjonalne konwersji osadzone.Każda specyfikacja konwersji definiuje sposób wartości na liście argumentów wówczas jest sformatowane i umieszczone w lokalizacji ustawienia konwersji pole msg_str. Specyfikacje konwersji mają w tym formacie:
% [[flag] [width] [. precision] [{h | l}]type
Parametry, które mogą być używane w msg_str są następujące:
flag
Jest kodem, który określa odstępy i uzasadnienie podstawione wartości.
Code
Prefiks lub justowanie
Description
-(minus)
Uzasadnione z lewej
Wyjustować do lewej w obrębie danego pole Szerokość wartość argumentu.
+ (plus)
Symbol prefiksu
Należy poprzedzić wartość argumentu ze znakiem plus (+) lub minus (-), jeśli wartość jest typu podpisane.
0 (zero)
uzupełnienie zerową
Dane wyjściowe zerami należy poprzedzić, aż do osiągnięcia minimalnej szerokości.Gdy pojawi się 0 i znakiem minus (-), 0 jest ignorowana.
# (numer)
0 x prefiksu dla szesnastkowego typ x lub X
W przypadku użycia z o, x lub X formatu, znak numeru () #flag prefaces dowolną wartość różną od zera, 0, 0 x lub 0 X, odpowiednio.Gdy d, i lub u jest poprzedzona znakiem numeru () #flag, flaga jest ignorowana.
"" (pusty)
uzupełnienie miejsca
Jeśli wartość jest podpisane i pozytywne, należy poprzedzić wartość dane wyjściowe z pustych miejsc.To jest ignorowana, jeśli z flagą znak plus (+).
width
Jest liczbą całkowitą, która określa minimalną szerokość pole, w którym znajduje się wartość argumentu.Jeśli długość wartość argumentu jest równa lub przekracza width, wartość jest drukowana z nie uzupełnienie. Jeśli wartość jest krótszy niż width, wartość jest wypełniane do długości określonej w width.
Gwiazdka ** oznacza, że szerokość została określona przez argument skojarzone listy argumentów, które musi być wartością całkowitą.
precision
Jest największą liczbą z wartość argumentu dla wartości ciąg znaków.Na przykład jeśli ciąg zawiera pięć znaków i dokładność jest 3, używane są tylko trzy pierwsze znaki wartości ciągu.
Dla wartości całkowitych precision jest minimalną liczbę cyfr drukowane.
Gwiazdka ** oznacza, że dokładność została określona przez argument skojarzone listy argumentów, które musi być wartością całkowitą.
{h | l} type
Jest używana z d typów znaków, i, o, s, x, X lub u, a następnie tworzy shortint (h) or longint (l) wartości.
Określenie typów
Reprezentuje
d lub I
Całkowita
o
Liczba ósemkowa, niepodpisanych
s
String
u
Liczba całkowita bez znaku
x lub X
Szesnastkowa bez znaku
Uwaga
Specyfikacje te typu są oparte na te, które pierwotnie zostały zdefiniowane dla printf Funkcja w C biblioteki standardowej. Specyfikacja typu używane na mapie ciągi komunikatów RAISERROR do Transact-SQL typy danych, podczas specyfikacje wykorzystywane w printf mapowania danych języka C typów. W specyfikacji typu printf nie są obsługiwane przez RAISERROR po Transact-SQL nie ma typ danych, podobnie jak typ danych C. Na przykład %p Specyfikacja wskaźników nie jest obsługiwany w RAISERROR, ponieważ Transact-SQL nie ma typu danych wskaźnika.
Uwaga
To convert a value to the Transact-SQLbigint data type, specify %I64d.
**@**local_variable
Jest zmienną dowolnego typu danych prawidłowych znaków, który zawiera ciąg, sformatowane w taki sam sposób, jak msg_str. **@**local_variable must be char lub varchar, lub być w stanie są niejawnie konwertowane na te typy danych.severity
Jest to poziom ważności zdefiniowanej przez użytkownika skojarzonego z tą wiadomością.Podczas korzystania z msg_id Aby podnieść utworzone przy użyciu wiadomości przez użytkownika sp_addmessage, wskaźnik ważności, określona w instrukcji RAISERROR zastępuje wskaźnik ważności, określone w sp_addmessage.Poziomy ważności, od 0 do 18 może zostać określony przez dowolnego użytkownika.Poziomy ważności, od 19 do 25 może być określony tylko przez członków sysadmin stała rola serwera lub użytkownicy z uprawnieniami ALTER TRACE.Poziomy ważności, od 19 do 25 Opcja WITH dziennik jest wymagane.
Ostrzeżenie
Poziomy ważności, od 20 do 25 są uważane za krytyczne.Jeśli napotka poziom krytyczny wskaźnik ważności dla klient jest przerywane po odebraniu wiadomości, a błąd jest rejestrowany w dzienniku w dziennikach aplikacji i błąd.
Uwaga
Wskaźnik ważności poziomach mniej niż 0, są interpretowane jako 0.Poziomy ważności większą niż 25, są interpretowane jako 25.
state
Jest liczbą całkowitą z zakresu od 0 do 255.Ujemne wartości lub wartości większej niż 255 generuje błąd.Jeśli ten sam błąd zdefiniowany przez użytkownika jest uruchamiany w wielu miejscach, stosując stanu unikatowy dla każdej lokalizacji może pomóc w wyszukiwanie, które części kodu jest zwiększenie błędy.
argument
Parametry używane w podstawienia dla zmiennych są zdefiniowane w msg_str lub komunikat odpowiadający msg_id. Może wynosić 0 lub więcej parametrów podstawienia, ale liczba parametrów podstawienia nie może przekraczać 20.Każdy parametr podstawiania może być zmienną lokalną lub któregokolwiek z tych typów danych: tinyint, smallint, int, char, varchar, nchar, nvarchar, binary, lub varbinary. Inne typy danych są obsługiwane.option
Jest to opcja niestandardowy błąd i może mieć jedną z wartości w tabela poniżej.Wartość
Description
DZIENNIK
Logs the error in the error log and the application log for the instance of the Microsoft SQL Server Database Engine.Błędy zarejestrowane dziennik błędów są obecnie ograniczone do maksymalnie 440 bajtów.Tylko element członkowski członkowski sysadmin stałych roli serwera lub użytkownik z uprawnieniami ALTER TRACE można określić WITH dziennik.
NOWAIT
Natychmiast wysyła wiadomości do klient.
SETERROR
Ustawia @@ błąd i ERROR_NUMBER wartości msg_id lub 50 000, niezależnie od poziom ważności.
Remarks
Błędy generowane przez RAISERROR działają tak samo, jak błędy generowane przez Database Engine Kod. Wartości określone przez RAISERROR są raportowane przez funkcje systemowe ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY, ERROR_STATE i @@ błąd.Po uruchomieniu z ważności 11 lub wyższy w blok TRY RAISERROR przekazuje sterowanie do skojarzonego blok CATCH.Błąd jest zwracana do obiektu wywołującego, jeśli jest uruchamiany RAISERROR:
Poza zakres wszelkie TRY blok.
O ważności 10 lub niżej w blok TRY.
Z waga 20 lub nowszej, która kończy połączenia z bazą danych.
CATCH bloki umożliwia RAISERROR rethrow błędu, która wywołała blok CATCH za pomocą funkcje systemowe, takich jak ERROR_NUMBER i ERROR_MESSAGE odtworzyć pierwotne informacje o błędzie.Błąd @@ jest domyślnie ustawiona na 0 dla wiadomości o ważności od 1 do 10.Aby uzyskać więcej informacji zobaczZa pomocą TRY... CATCH instrukcji języka Transact-SQL.
Kiedy msg_id Określa dostępne z zdefiniowanych przez użytkownika wiadomości sys.messages wykazu widoku RAISERROR przetwarza wiadomość z kolumna tekstu przy użyciu tych samych reguł, jak są stosowane do tekstu wiadomości przez użytkownika określone za pomocą msg_str. Tekst zdefiniowany przez użytkownika wiadomości może zawierać specyfikacje konwersji i RAISERROR będzie mapować wartości argumentu do specyfikacje konwersji.Użycie sp_addmessage Dodawanie komunikaty zdefiniowane przez użytkownika i sp_dropmessage , aby usunąć błąd zdefiniowany przez użytkownika wiadomości.
RAISERROR może służyć jako alternatywa dla PRINT do zwracania wiadomości wywołaniem aplikacji.RAISERROR obsługuje podstawianie znaków, które są podobne do funkcji printf Funkcja w C biblioteki standardowej, podczas gdy Transact-SQL Nie ma instrukcja drukowania. Instrukcja PRINT nie dotyczy bloki TRY podczas wykonywania instrukcji RAISERROR o ważności 11-19 w blok TRY przekazuje sterowanie do skojarzonego blok CATCH.Należy określić wagę 10 lub niższym używania RAISERROR powinna zwrócić komunikat z blok TRY bez wywoływania blok CATCH.
Zazwyczaj kolejne argumenty zastąpić specyfikacje konwersji kolejnych; pierwszy argument zastępuje ustawienia konwersji pierwszego, drugiego argumentu zastępuje ustawienia konwersji drugiej i tak dalej.Na przykład w następującej RAISERROR w pierwszym argumencie instrukcja N'number' zastępuje pierwsze specyfikacja konwersji %s; a w drugim argumencie 5 zastępuje drugiego specyfikacja konwersji %d.
RAISERROR (N'This is message %s %d.', -- Message text.
10, -- Severity,
1, -- State,
N'number', -- First argument.
5); -- Second argument.
-- The message text returned is: This is message number 5.
GO
Jeśli gwiazdka ** określono szerokość lub precyzji ustawienia konwersji, jako wartość argumentu jest określona wartość do szerokości lub precyzji.W takim przypadek jednego ustawienia konwersji, można użyć maksymalnie trzy argumenty, jedną dla wartości szerokości, dokładność i zamiany.
Na przykład obie następujące czynności RAISERROR instrukcje zwraca ten sam ciąg. Jeden określa wartości szerokości i precyzję w liście argumentów; drugi określa specyfikacji konwersji.
RAISERROR (N'<<%*.*s>>', -- Message text.
10, -- Severity,
1, -- State,
7, -- First argument used for width.
3, -- Second argument used for precision.
N'abcde'); -- Third argument supplies the string.
-- The message text returned is: << abc>>.
GO
RAISERROR (N'<<%7.3s>>', -- Message text.
10, -- Severity,
1, -- State,
N'abcde'); -- First argument supplies the string.
-- The message text returned is: << abc>>.
GO
Przykłady
A.Powrót z blok CATCH informacje o błędach
Poniższy przykład kodu pokazuje, jak używać RAISERROR wewnątrz TRY blok, aby spowodować wykonanie przejść do skojarzonym CATCH blok. Ponadto przedstawia sposób używania RAISERROR Aby przywrócić informacje o błędzie, która wywołała CATCH blok.
Uwaga
RAISERROR tylko generuje błędy ze stanem od 1 do 127.Ponieważ Database Engine może podnieść błędy ze stanem 0, zaleca się sprawdzenie stanu błędu zwrócony przez ERROR_STATE przed przekazaniem go jako wartość parametru stanu RAISERROR.
BEGIN TRY
-- RAISERROR with severity 11-19 will cause execution to
-- jump to the CATCH block.
RAISERROR ('Error raised in TRY block.', -- Message text.
16, -- Severity.
1 -- State.
);
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
-- Use RAISERROR inside the CATCH block to return error
-- information about the original error that caused
-- execution to jump to the CATCH block.
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH;
B.Tworzenie wiadomości ad hoc w sys.messages
W poniższym przykładzie pokazano, jak podnieść wiadomości przechowywanych w sys.messages Służy do wyświetlania katalogu. Wiadomość została dodana do sys.messages wykazu widoku przy użyciu sp_addmessage procedury zapisanej w systemie jako numer komunikatu 50005.
sp_addmessage @msgnum = 50005,
@severity = 10,
@msgtext = N'<<%7.3s>>';
GO
RAISERROR (50005, -- Message id.
10, -- Severity,
1, -- State,
N'abcde'); -- First argument supplies the string.
-- The message text returned is: << abc>>.
GO
sp_dropmessage @msgnum = 50005;
GO
C.Za pomocą zmiennej lokalnej podania tekstu wiadomości
W poniższym przykładzie kodu pokazano, jak użyć zmiennej lokalnej do dostarczania tekst komunikatu dla RAISERROR Instrukcja.
DECLARE @StringVariable NVARCHAR(50);
SET @StringVariable = N'<<%7.3s>>';
RAISERROR (@StringVariable, -- Message text.
10, -- Severity,
1, -- State,
N'abcde'); -- First argument supplies the string.
-- The message text returned is: << abc>>.
GO
See Also