Ten artykuł był przetłumaczony komputerowo. Oryginalny tekst zobaczysz, umieszczając wskaźnik myszy nad zdaniami w artykule. |
Tłumaczenie
Oryginał
|
RAISERROR (Transact-SQL)
Generuje komunikat o błędzie i inicjuje wystąpił błąd podczas przetwarzania dla sesja. RAISERROR albo można odwołać wiadomości zdefiniowane przez użytkownika przechowywane w sys.messages wykazu widoku lub dynamicznie budowania wiadomości. Wiadomość jest zwracana jako komunikat Błąd serwera aplikacji wywołującej lub skojarzone połowu blok TRY…CATCH konstrukcji.
Błędy generowane przez RAISERROR działają tak samo, jak błędy generowane przez Aparat baz danych kodu. Wartości określone przez RAISERROR są raportowane przez ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY, ERROR_STATE i @@ błąd funkcje systemowe. Po uruchomieniu z ważności 11 lub wyższej w blokTRY RAISERROR przekazuje sterowanie do skojarzonego CATCH blok. Błąd jest zwracany do obiektu wywołującego uruchomienia RAISERROR:
-
Poza zakres PRÓBOWAĆ blok.
-
O ważności 10 lub niższej w blokTRY.
-
O ważności 20 lub wyższej, która kończy połączenia bazy danych.
CATCH bloki można użyć instrukcji RAISERROR do ponownego zgłoszenia błędu, która wywołała blok CATCH przy użyciu funkcje systemowe , takie jak ERROR_NUMBER i ERROR_MESSAGE do pobierania oryginalne informacje o błędzie. @@ Błąd jest zestaw na 0 domyślnie komunikaty o poziomie ważności od 1 do 10. Aby uzyskać więcej informacji, zobacz Za pomocą SPRÓBOWAĆ...POŁOWU w języku Transact-SQL.
Gdy msg_id określa dostępne z wiadomości zdefiniowane przez użytkownika sys.messages widok wykazu RAISERROR przetwarza wiadomość z tekst kolumna przy użyciu tych samych zasad, jak są stosowane do tekstu wiadomości zdefiniowane przez użytkownika określone za pomocą msg_str. Tekst zdefiniowany przez użytkownika wiadomości mogą zawierać specyfikacje konwersji i RAISERROR będzie mapować wartości argumentu do specyfikacje konwersji. Użycie sp_addmessage dodać komunikaty zdefiniowane przez użytkownika i sp_dropmessage do usuwania wiadomości błąd zdefiniowany przez użytkownika.
RAISERROR może służyć jako alternatywa dla wydruku do zwracania wiadomości do wywoływania aplikacji. RAISERROR obsługuje podstawianie znaków, które są podobne do funkcji printfc biblioteki standardowejfunkcja podczas Transact-SQL wydruku instrukcja nie nie. DRUKOWANIE instrukcja nie dotyczy bloków TRY podczas wykonywania instrukcji RAISERROR z ważności 11-19 w blok TRY przekazuje sterowanie do skojarzonego CATCH blok. Określ ważności 10 lub niższej użycia RAISERROR do zwracania wiadomości z blok TRY, bez wywoływania blokCATCH.
Zazwyczaj kolejne argumenty zastąpić specyfikacje kolejnych konwersji; pierwszy argument zastępuje specyfikacja konwersji pierwszego, drugiego argumentu zastępuje drugiej specyfikacja konwersji i tak dalej. Na przykład w następującej RAISERROR instrukcja, pierwszego argumentu N'number' zastępuje pierwszą 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
Gwiazdka (*) jest określona szerokość lub precision specyfikacja konwersji, wartość będzie używana dla szerokości lub precision określono jako argument wartość całkowitą. W tym przypadekjeden specyfikacja konwersji można użyć maksymalnie trzy argumenty, jedną dla wartości szerokości, precyzji i podstawiania.
Na przykład oba następujące RAISERROR instrukcji zwracają ten sam ciąg. Jeden określa wartości szerokości i precyzja na liście argumentów; drugi określa je specyfikacja 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
A.Zwraca informacje o błędzie z blokCATCH
W poniższym przykładzie przedstawiono sposób użycia RAISERROR wewnątrz TRY blok powoduje wykonanie szybkiego dostępu do skojarzonego CATCH blok. Przedstawiono również sposób użycia RAISERROR do zwracania informacji o błędzie, która wywołała CATCH blok.
Uwaga:
|
|---|
|
RAISERROR tylko generuje błędy z Państwem od 1 do 127. Ponieważ Aparat baz danych może podnieść błędy z Państwem 0, zaleca się sprawdzić stan błędu zwracany przez ERROR_STATE przed przekazaniem go jako wartość parametru Państwo 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
Poniższy przykład ilustruje sposób podnieść wiadomości przechowywane w sys.messages katalogu widoku. Wiadomość została dodana do sys.messages katalogu widoku za pomocą sp_addmessage systemu procedura składowana 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 do dostarczania wiadomości tekstowych
Poniższy przykład kodu pokazuje, 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
