Udostępnij za pośrednictwem


Za pomocą instrukcji RAISERROR

RAISERROR jest używany do zwracania wiadomości z powrotem do aplikacji przy użyciu tego samego formatu jak błąd systemu lub ostrzeżenie generowane przez Aparat baz danych programu SQL Server.

RAISERROR można powrócić, albo:

  • Komunikat o błędzie przez użytkownika, który został utworzony za pomocą sp_addmessage systemowa procedura składowana.Są to komunikaty numer komunikatu jest większa niż 50 000, które mogą być wyświetlane w sys.messages wykazu widoku.

  • Ciąg wiadomość, określony w instrukcja RAISERROR.

RAISERROR można również:

  • Przypisać numer błędu, ważności i stanu.

  • Wniosek, że błąd jest rejestrowany w Aparat baz danych Dziennik błędów i Microsoft można aplikacji systemu Windows

  • Podstawić wartości argumentu do tekstu wiadomości, podobnie jak język c printf_s funkcja.

Aby powrócić do aplikacji komunikaty ostrzegawcze lub informacyjne można RAISERROR i Drukuj.Tekst wiadomości zwróconych przez RAISERROR może być budowany przy użyciu ciągu podstawienia funkcjonalność podobna do funkcja printf_s c biblioteki standardowej Drukuj tylko może zwracać ciąg znaków lub wyrażenie znaków.Dotkliwość RAISERROR 11-19 wykonywane w bloku TRY TRY…CATCH konstrukcji sterowania powoduje przekazanie do skojarzonego blok CATCH.Określ ważności 10 lub niższej zwraca wiadomości przy użyciu RAISERROR bez wywoływania blok CATCH.Drukuj nie transferu sterowania do blok CATCH.

Gdy RAISERROR jest używany z msg_id wiadomości zdefiniowane przez użytkownika w sys.messages, msg_id są zwracane jako SQL Server numer błędu lub błąd macierzysty kodu.Gdy RAISERROR jest używany z msg_str zamiast msg_id, SQL Server numer błędu i błąd macierzysty zwracane jest 50000.

RAISERROR zwraca komunikat o błędzie przez użytkownika, używać numeru inne Państwo w każdej RAISERROR, która odwołuje się do tego błędu.Może to pomóc w diagnozowaniu błędów, gdy są one wywoływane.

Użyj instrukcji RAISERROR do:

  • Pomoc w rozwiązywaniu problemów Transact-SQL kodu.

  • Sprawdź wartości danych.

  • Zwraca wiadomości zawierające tekst zmiennej.

  • Powoduje wykonanie do przechodzenia z blok TRY skojarzone blok CATCH.

  • Zwraca informacje o błędzie z blok CATCH do wywoływania partia lub aplikacji.

Poniższy przykład podstawia wartości z DB_ID() i DB_NAME() Funkcje wiadomości wysyłane z powrotem do aplikacji:

DECLARE @DBID INT;
SET @DBID = DB_ID();

DECLARE @DBNAME NVARCHAR(128);
SET @DBNAME = DB_NAME();

RAISERROR
    (N'The current database ID is:%d, the database name is: %s.',
    10, -- Severity.
    1, -- State.
    @DBID, -- First substitution argument.
    @DBNAME); -- Second substitution argument.
GO

W tym przykładzie zawiera te same informacje, używając wiadomości przez użytkownika.

EXECUTE sp_dropmessage 50005;
GO
EXECUTE sp_addmessage 50005, -- Message id number.
    10, -- Severity.
    N'The current database ID is: %d, the database name is: %s.';
GO
DECLARE @DBID INT;
SET @DBID = DB_ID();

DECLARE @DBNAME NVARCHAR(128);
SET @DBNAME = DB_NAME();

RAISERROR (50005,
    10, -- Severity.
    1, -- State.
    @DBID, -- First substitution argument.
    @DBNAME); -- Second substitution argument.
GO

Poniższy przykład kodu pokazuje sposób używania RAISERROR wewnątrz bloku TRY spowodować wykonanie przeskoczyć do skojarzonego blok CATCH.Pokazuje także jak używać RAISERROR zwraca informacje o błędzie, która wywołała blok CATCH.

Ostrzeżenie

RAISERROR mogą generować błędy z Państwem od 1 do 127 tylko.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;