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.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

RAISERROR ( { msg_id | msg_str | @local_variable }
    { ,severity ,state }
    [ ,argument [ ,...n ] ] )
    [ WITH option [ ,...n ] ]

Argumenty

  • msg_id
    Błąd zdefiniowany przez użytkownika numer komunikatu , przechowywane w sys.messages przy użyciu widoku wykazu sp_addmessage.Błędy o numerach komunikaty o błędach zdefiniowane przez użytkownika powinna być większa niż 50 000.Gdy msg_id nie jest określony, RAISERROR wywołuje komunikat o błędzie wraz z liczbą błędów 50000.

  • msg_str
    Jest podobny do wiadomości przez użytkownika z formatowaniem printf funkcja c biblioteki standardowej.Komunikat o błędzie może mieć maksymalnie 2 047 znaków.Jeśli wiadomość zawiera co najmniej 2048 znaków, są wyświetlane tylko pierwszy 2,044 i wielokropek dodaje się, aby wskazać, że wiadomość została obcięta.Należy zauważyć, że parametrów podstawienia zużywa więcej znaków niż przedstawiono dane wyjściowe ze względu na zachowanie wewnętrznej pamięci masowej.Na przykład substytucji parametr %d z przypisaną wartość 2 faktycznie daje jeden znak w ciąg wiadomości, ale również wewnętrznie zajmuje trzy dodatkowe znaki magazynu.Wymóg ten magazyn zmniejsza liczbę znaków dostępnych dla operacji output wiadomości.

    Gdy msg_str określono RAISERROR wywołuje komunikat o błędzie wraz z liczbą błędów 50000.

    msg_strto ciąg znaków ze specyfikacjami opcjonalne konwersji osadzony.Każda specyfikacja konwersji definiuje, jak sformatowane i umieszczane w pole lokalizacji specyfikacja konwersji wartości na liście argumentów 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ą:

  • flag

    Jest kodem, który określa odstępy i uzasadnienie podstawioną wartość.

    Kod

    Prefiks lub justowanie

    Opis

    -(minus)

    Wyrównana do lewej

    Wyrównaj do lewej w obrębie danego pole szerokość wartość argumentu.

    + (plus)

    Znak prefiksu

    Należy poprzedzić wartość argumentu ze znakiem plus (+) lub minus (-), jeśli wartość jest typu podpisane.

    0 (zero)

    Zero uzupełnienie

    Należy poprzedzić wyjścia zerami, aż do osiągnięcia minimalnej szerokości.Gdy pojawi się znak minus (-) i 0, 0 jest ignorowana.

    # (liczba)

    0 x prefiks szesnastkowy typ x lub x

    Po zastosowaniu o, x lub x format, znak numeru () #flag prefaces dowolną wartość niezerową, 0, 0 x lub 0 X odpowiednio.Gdy d i lub u są poprzedzone znakiem numeru () #flag, flaga jest ignorowana.

    ' " (puste)

    Miejsca, uzupełnienie

    Jeśli wartość jest podpisane i pozytywne, należy poprzedzić wartości wyjściowych znakami odstępu.To jest ignorowane, jeśli flaga znak plus (+).

  • width

    Jest liczbą całkowitą, która definiuje 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 wyściełane, aby długość określoną w width.

    Gwiazdka (*) oznacza, że szerokość jest określone przez argument skojarzone z listy argument musi być liczbą całkowitą.

  • precision

    Jest maksymalną liczbę znaków z wartość argumentu wartości ciąg .Na przykład jeśli ciąg zawiera pięć znaków i precyzja jest 3, są używane pierwsze trzy znaki wartość ciąg .

    Dla wartości całkowitych precision jest minimalna liczba cyfr drukowanych.

    Gwiazdka (*) oznacza, że dokładność jest określone przez argument skojarzone z listy argument musi być liczbą całkowitą.

  • {h | l}type

    Jest używany znak typów d i, o, s, x, X lub u i tworzy shortint (h) lub longint wartości (l).

    Specyfikacja typu

    Reprezentuje

    d lub i

    Liczba całkowita ze znakiem

    o

    Niepodpisane ósemkową

    s

    Ciąg

    u

    Liczba całkowita bez znaku

    x lub x

    Szesnastkową bez znaku

    Ostrzeżenie

    Specyfikacje te typu oparte są na te zdefiniowane pierwotnie dla printf funkcja c biblioteki standardowej.Specyfikacje typu, używane w tablicy ciągów wiadomości RAISERROR do Transact-SQL typy danych, natomiast specyfikacje używane w printf mapowane na typy danych języka C.Wpisz specyfikacje wykorzystywane w printf nie są obsługiwane przez RAISERROR po Transact-SQL nie ma typ danych podobny do typu c danych.Na przykład %p Specyfikacja wskaźników nie jest obsługiwany w RAISERROR, ponieważ Transact-SQL nie ma typ danych wskaźnika.

    Ostrzeżenie

    Aby konwertować wartości do Transact-SQL bigint Typ danych określić % I64d.

  • **@local_variable
    Zmienna dowolnego typu danych prawidłowych znaków, który zawiera ciąg jest sformatowany w taki sam sposób jak msg_str.
    @**local_variable musi być char lub varchar, lub być w stanie są niejawnie konwertowane na tych typów danych.

  • severity
    Jest zdefiniowane przez użytkownika ważności poziom skojarzone z tą wiadomością.Podczas korzystania z msg_id podnieść wiadomości zdefiniowane przez użytkownika utworzone za pomocą sp_addmessage, wagi, określona w instrukcji RAISERROR zastępuje ważności określonych w sp_addmessage.

    Poziomy ważności od 0 do 18 może być 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 Zmiana śledzenia.Poziomu ważności od 19 do 25 opcja z dziennika jest wymagana.

    PrzestrogaPrzestroga

    Poziomy ważności od 20 do 25 są uważane za krytyczne.Jeśli napotka błąd krytyczny wskaźnik ważności poziom połączenie klient jest zakończone po odebraniu wiadomości, a błąd jest rejestrowany w dziennikach aplikacji i błąd.

    Ostrzeżenie

    Wskaźnik ważności poziomach mniej niż 0, są interpretowane jako 0.Poziomy ważności większym niż 25 są interpretowane jako 25.

  • state
    Jest liczbą całkowitą z zakresu od 0 do 255.Ujemne wartości lub wartości większe niż 255 generuje błąd.

    Jeśli ten sam błąd zdefiniowany przez użytkownika jest wywoływane w wielu lokalizacjach, przy użyciu numeru Państwo unikatowy dla każdej lokalizacji ułatwiają znajdowanie, która sekcja kodu jest podnoszenie błędy.

  • argument
    Są parametry używane w celu zastąpienia zmiennych zdefiniowanych w msg_str lub odpowiadające wiadomość do 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ć zmienna lokalna lub dowolnego z tych typów danych: tinyint, smallint, int, char, varchar, nchar, nvarchar, binary, or varbinary.Inne typy danych są obsługiwane.

  • option
    Opcja niestandardowy błąd i może być jedną z wartości w następującej tabela.

    Wartość

    Opis

    DZIENNIK

    Rejestruje błąd w dziennik błędów i wystąpienie w dzienniku aplikacji Microsoft SQL Server Aparat baz danych.Błędy zarejestrowane w dziennik błędów są obecnie ograniczone do maksymalnie 440 bajtów.Tylko element członkowski sysadmin stała rola serwera lub użytkownika z uprawnieniami Zmiana śledzenia można określić z dziennika.

    NOWAIT

    Natychmiast wysyła wiadomości do klient.

    SETERROR

    Ustawia @@ błędów i wartości ERROR_NUMBER msg_id lub 50000 niezależnie od poziomważności.

Uwagi

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

Przykłady

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.

Ostrzeżenie

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