RAISERROR (Transact-SQL)RAISERROR (Transact-SQL)

GILT FÜR: jaSQL Server jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Generiert eine Fehlermeldung und initiiert die Verarbeitung von Fehlern für die Sitzung.Generates an error message and initiates error processing for the session. RAISERROR kann entweder auf eine benutzerdefinierte, in der Katalogsicht „sys.messages“ gespeicherte Meldung verweisen oder eine Meldung dynamisch erstellen.RAISERROR can either reference a user-defined message stored in the sys.messages catalog view or build a message dynamically. Die Meldung wird als Serverfehlermeldung an die aufrufende Anwendung oder an einen zugeordneten CATCH-Block eines TRY...CATCH-Konstrukts zurückgegeben.The message is returned as a server error message to the calling application or to an associated CATCH block of a TRY...CATCH construct. In neuen Anwendungen sollte stattdessen THROW verwendet werden.New applications should use THROW instead.

Themenlinksymbol Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- Syntax for SQL Server and Azure SQL Database  
  
RAISERROR ( { msg_id | msg_str | @local_variable }  
    { ,severity ,state }  
    [ ,argument [ ,...n ] ] )  
    [ WITH option [ ,...n ] ]  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
RAISERROR ( { msg_str | @local_variable }  
    { ,severity ,state }  
    [ ,argument [ ,...n ] ] )  
    [ WITH option [ ,...n ] ]  

ArgumenteArguments

msg_idmsg_id
Ist die Nummer einer in der Katalogsicht „sys.message“ mithilfe von „sp_addmessage“ gespeicherten benutzerdefinierten Fehlermeldung.Is a user-defined error message number stored in the sys.messages catalog view using sp_addmessage. Fehlernummern für benutzerdefinierte Fehlermeldungen müssen größer als 50000 sein.Error numbers for user-defined error messages should be greater than 50000. Wenn msg_id nicht angegeben ist, löst RAISERROR eine Fehlermeldung mit der Fehlernummer 50000 aus.When msg_id is not specified, RAISERROR raises an error message with an error number of 50000.

msg_strmsg_str
Ist eine benutzerdefinierte Meldung mit einer Formatierung, die der printf-Funktion in der Standardbibliothek für C ähnelt.Is a user-defined message with formatting similar to the printf function in the C standard library. Die Fehlermeldung kann maximal 2.047 Zeichen enthalten.The error message can have a maximum of 2,047 characters. Wenn die Meldung mehr als 2.048 Zeichen enthält, werden nur die ersten 2.044 angezeigt und Auslassungspunkte angefügt, die anzeigen, dass die Meldung abgeschnitten wurde.If the message contains 2,048 or more characters, only the first 2,044 are displayed and an ellipsis is added to indicate that the message has been truncated. Aufgrund des internen Speicherverhaltens beanspruchen Ersetzungsparameter mehr Zeichen als in der Ausgabe angezeigt werden.Note that substitution parameters consume more characters than the output shows because of internal storage behavior. So ergibt beispielsweise der Ersetzungsparameter %d mit dem zugewiesenen Wert 2 tatsächlich ein einzelnes Zeichen in der Meldungszeichenfolge, beansprucht intern beim Speichern jedoch drei zusätzliche Zeichen.For example, the substitution parameter of %d with an assigned value of 2 actually produces one character in the message string but also internally takes up three additional characters of storage. Durch diese Speicheranforderung wird die Anzahl von verfügbaren Zeichen für die Meldungsausgabe gesenkt.This storage requirement decreases the number of available characters for message output.

Wenn msg_str angegeben ist, löst RAISERROR eine Fehlermeldung mit der Fehlernummer 50000 aus.When msg_str is specified, RAISERROR raises an error message with an error number of 50000.

msg_str ist eine Zeichenfolge mit optionalen eingebetteten Konvertierungsspezifikationen.msg_str is a string of characters with optional embedded conversion specifications. Jede Konvertierungsspezifikation definiert, wie ein Wert in der Argumentliste formatiert und in einem Feld an der Position der Konvertierungsspezifikation in msg_str platziert wird.Each conversion specification defines how a value in the argument list is formatted and placed into a field at the location of the conversion specification in msg_str. Konvertierungsspezifikationen weisen das folgende Format auf:Conversion specifications have this format:

% [[Flag] [Breite] [.% [[flag] [width] [. Genauigkeit] [{h | l}]] Typprecision] [{h | l}]] type

Die folgenden Parameter können in msg_str verwendet werden:The parameters that can be used in msg_str are:

flagflag

Ist ein Code, der den Abstand und die Ausrichtung des ersetzten Werts bestimmt.Is a code that determines the spacing and justification of the substituted value.

CodeCode Präfix oder AusrichtungPrefix or justification und BeschreibungDescription
- (Minus)- (minus) LinksbündigLeft-justified Der Argumentwert wird innerhalb der angegebenen Feldbreite linksbündig ausgegeben.Left-justify the argument value within the given field width.
+ (Plus)+ (plus) ZeichenpräfixSign prefix Dem Argumentwert wird ein Plus- (+) oder Minuszeichen (-) vorangestellt, wenn der Wert einen Datentyp mit Vorzeichen aufweist.Preface the argument value with a plus (+) or minus (-) if the value is of a signed type.
0 (Null)0 (zero) Auffüllung mit NullenZero padding Der Ausgabe wird 0 vorangestellt, bis die Mindestbreite erreicht ist.Preface the output with zeros until the minimum width is reached. Wenn 0 und das Minuszeichen (-) auftreten, wird 0 ignoriert.When 0 and the minus sign (-) appear, 0 is ignored.
# (Nummer)# (number) 0x-Präfix für Hexadezimaltyp von x oder X0x prefix for hexadecimal type of x or X Das Nummernzeichenflag (#) wird jedem Wert ungleich 0 mit 0, 0x bzw. 0X vorangestellt, wenn es mit dem Format o, x oder X verwendet wird.When used with the o, x, or X format, the number sign (#) flag prefaces any nonzero value with 0, 0x, or 0X, respectively. Wenn das Nummernzeichenflag (#) vor d, i oder u steht, wird das Flag ignoriert.When d, i, or u are prefaced by the number sign (#) flag, the flag is ignored.
" " (Leerzeichen)' ' (blank) Auffüllung mit LeerstellenSpace padding Dem Ausgabewert werden Leerzeichen vorangestellt, wenn der Wert ein Vorzeichen aufweist und positiv ist.Preface the output value with blank spaces if the value is signed and positive. Dies wird ignoriert, wenn er mit dem Pluszeichenflag (+) versehen ist.This is ignored when included with the plus sign (+) flag.

widthwidth

Ist eine ganze Zahl, die die Mindestbreite des Felds definiert, in das der Argumentwert platziert werden soll.Is an integer that defines the minimum width for the field into which the argument value is placed. Wenn die Länge des Argumentwerts gleich oder länger als der Parameter width ist, wird der Wert ohne Auffüllung ausgegeben.If the length of the argument value is equal to or longer than width, the value is printed with no padding. Wenn der Wert kürzer als der Parameter width ist, wird der Wert bis zu der unter width angegebenen Länge aufgefüllt.If the value is shorter than width, the value is padded to the length specified in width.

Ein Sternchen (*) bedeutet, dass die Breite durch das zugeordnete Argument in der Argumentliste angegeben wird, welches ein Wert für eine ganze Zahl sein muss.An asterisk (*) means that the width is specified by the associated argument in the argument list, which must be an integer value.

precisionprecision

Ist die maximale Anzahl von Zeichen aus dem Argumentwert für Zeichenfolgenwerte.Is the maximum number of characters taken from the argument value for string values. Wenn beispielsweise eine Zeichenfolge über fünf Zeichen verfügt und die Genauigkeit 3 beträgt, werden nur die ersten drei Zeichen des Zeichenfolgenwerts verwendet.For example, if a string has five characters and precision is 3, only the first three characters of the string value are used.

Bei ganzzahligen Werten gibt der Parameter precision die Mindestanzahl der ausgegebenen Stellen an.For integer values, precision is the minimum number of digits printed.

Ein Sternchen (*) bedeutet, dass die Genauigkeit durch das zugeordnete Argument in der Argumentliste angegeben wird, welches ein Wert für eine ganze Zahl sein muss.An asterisk (*) means that the precision is specified by the associated argument in the argument list, which must be an integer value.

{h | l} type{h | l} type

Wird zusammen mit den Zeichentypen d, i, o, s, x, X oder u verwendet und erstellt shortint (h)- oder longint (l)-Werte.Is used with character types d, i, o, s, x, X, or u, and creates shortint (h) or longint (l) values.

TypspezifikationType specification repräsentiertRepresents
d oder id or i Ganze Zahl mit VorzeichenSigned integer
oo Oktal ohne VorzeichenUnsigned octal
ss ZeichenfolgeString
uu Ganze Zahl ohne VorzeichenUnsigned integer
x oder Xx or X Hexadezimal ohne VorzeichenUnsigned hexadecimal

Hinweis

Diese Typspezifikationen basieren auf den ursprünglich für die printf-Funktion in der Standardbibliothek für C definierten Typspezifikationen.These type specifications are based on the ones originally defined for the printf function in the C standard library. Die in RAISERROR-Meldungszeichenfolgen verwendeten Typspezifikationen werden Transact-SQLTransact-SQL-Datentypen zugeordnet, während die in printf verwendeten Spezifikationen Datentypen der Programmiersprache C zugeordnet werden.The type specifications used in RAISERROR message strings map to Transact-SQLTransact-SQL data types, while the specifications used in printf map to C language data types. In printf verwendete Typspezifikationen werden nicht von RAISERROR unterstützt, wenn Transact-SQLTransact-SQL nicht über einen mit dem zugeordneten C-Datentyp vergleichbaren Datentyp verfügt.Type specifications used in printf are not supported by RAISERROR when Transact-SQLTransact-SQL does not have a data type similar to the associated C data type. So wird die %p-Spezifikation für Zeiger beispielsweise nicht in RAISERROR unterstützt, da Transact-SQLTransact-SQL über keinen Zeigerdatentyp verfügt.For example, the %p specification for pointers is not supported in RAISERROR because Transact-SQLTransact-SQL does not have a pointer data type.

Hinweis

Zum Konvertieren eines Werts in den Transact-SQLTransact-SQLbigint-Datentyp müssen Sie %I64d angeben.To convert a value to the Transact-SQLTransact-SQL bigint data type, specify %I64d.

@local_variable@local_variable
Eine Variable eines beliebigen Zeichendatentyps, die eine Zeichenfolge enthält, die auf die gleiche Weise wie msg_str formatiert ist.Is a variable of any valid character data type that contains a string formatted in the same manner as msg_str. @local_variable muss auf char oder varchar festgelegt oder implizit in diese Datentypen konvertierbar sein.@local_variable must be char or varchar, or be able to be implicitly converted to these data types.

severityseverity
Ist der benutzerdefinierte Schweregrad, der dieser Meldung zugeordnet ist.Is the user-defined severity level associated with this message. Wird msg_id zum Auslösen einer mithilfe von „sp_addmessage“ erstellten benutzerdefinierten Meldung verwendet, überschreibt der in RAISERROR angegebene Schweregrad den Schweregrad in „sp_addmessage“.When using msg_id to raise a user-defined message created using sp_addmessage, the severity specified on RAISERROR overrides the severity specified in sp_addmessage.

Schweregrade von 0 bis 18 können von jedem Benutzer angegeben werden.Severity levels from 0 through 18 can be specified by any user. Schweregrade von 19 bis 25 können nur von Mitgliedern der festen Serverrolle „sysadmin“ oder von Benutzern mit ALTER TRACE-Berechtigungen angegeben werden.Severity levels from 19 through 25 can only be specified by members of the sysadmin fixed server role or users with ALTER TRACE permissions. Für Schweregrade von 19 bis 25 ist die Option WITH LOG erforderlich.For severity levels from 19 through 25, the WITH LOG option is required. Geringere Schweregrade als 0 werden als 0 interpretiert.Severity levels less than 0 are interpreted as 0. Höhere Schweregrade als 25 werden als 25 interpretiert.Severity levels greater than 25 are interpreted as 25.

Achtung

Die Schweregrade von 20 bis 25 werden als schwerwiegend angesehen.Severity levels from 20 through 25 are considered fatal. Wird ein schwerwiegender Schweregrad ermittelt, so wird die Clientverbindung nach Empfang der Meldung beendet und der Fehler in den Fehler- und Anwendungsprotokollen protokolliert.If a fatal severity level is encountered, the client connection is terminated after receiving the message, and the error is logged in the error and application logs.

Sie können -1 angeben, um den Wert für den Schweregrad des Fehlers zurückzugeben, wie im folgenden Beispiel veranschaulicht.You can specify -1 to return the severity value associated with the error as shown in the following example.

RAISERROR (15600,-1,-1, 'mysp_CreateCustomer');  

Im Folgenden finden Sie das Resultset.Here is the result set.

Msg 15600, Level 15, State 1, Line 1   
An invalid parameter or option was specified for procedure 'mysp_CreateCustomer'.

statestate
Eine ganze Zahl zwischen 0 und 255.Is an integer from 0 through 255. Negative Werte werden standardmäßig auf 1 festgelegt.Negative values default to 1. Werte größer als 255 sollten nicht verwendet werden.Values larger than 255 should not be used.

Wird derselbe benutzerdefinierte Fehler an mehreren Stellen ausgelöst, kann durch Verwenden einer eindeutigen Statusnummer für die einzelnen Positionen der Codeabschnitt ermittelt werden, der die Fehler auslöst.If the same user-defined error is raised at multiple locations, using a unique state number for each location can help find which section of code is raising the errors.

argumentargument
Entspricht den Parametern, die beim Ersetzen der in msg_str oder der msg_id entsprechenden Meldung definierten Variablen verwendet werden.Are the parameters used in the substitution for variables defined in msg_str or the message corresponding to msg_id. Es können 0 oder mehr Ersetzungsparameter vorhanden sein, jedoch nicht mehr als 20.There can be 0 or more substitution parameters, but the total number of substitution parameters cannot exceed 20. Die einzelnen Ersetzungsparameter können lokale Variablen sein oder einen der folgenden Datentypen aufweisen: tinyint, smallint, int, char, varchar, nchar, nvarchar, binary oder varbinary.Each substitution parameter can be a local variable or any of these data types: tinyint, smallint, int, char, varchar, nchar, nvarchar, binary, or varbinary. Es werden keine weiteren Datentypen unterstützt.No other data types are supported.

Optionoption
Ist eine benutzerdefinierte Option für den Fehler und kann einer der Werte in der folgenden Tabelle sein.Is a custom option for the error and can be one of the values in the following table.

valueValue und BeschreibungDescription
LOGLOG Protokolliert den Fehler in dem Fehler- und dem Anwendungsprotokoll für die Instanz von MicrosoftMicrosoft SQL ServerSQL Server Datenbank-EngineDatabase Engine.Logs the error in the error log and the application log for the instance of the MicrosoftMicrosoft SQL ServerSQL Server Datenbank-EngineDatabase Engine. Im Fehlerprotokoll protokollierte Fehler sind derzeit auf maximal 440 Bytes beschränkt.Errors logged in the error log are currently limited to a maximum of 440 bytes. Nur Mitglieder der festen Serverrolle „sysadmin“ oder Benutzer mit ALTER TRACE-Berechtigungen können WITH LOG angeben.Only a member of the sysadmin fixed server role or a user with ALTER TRACE permissions can specify WITH LOG.

Gilt für:Applies to: SQL ServerSQL Server, SQL-DatenbankSQL DatabaseSQL ServerSQL Server, SQL-DatenbankSQL Database
NOWAITNOWAIT Sendet Meldungen sofort an den Client.Sends messages immediately to the client.

Gilt für:Applies to: SQL ServerSQL Server, SQL-DatenbankSQL DatabaseSQL ServerSQL Server, SQL-DatenbankSQL Database
SETERRORSETERROR Legt die Werte @@ERROR und ERROR_NUMBER unabhängig vom Schweregrad auf msg_id oder 50000 fest.Sets the @@ERROR and ERROR_NUMBER values to msg_id or 50000, regardless of the severity level.

Gilt für:Applies to: SQL ServerSQL Server, SQL-DatenbankSQL DatabaseSQL ServerSQL Server, SQL-DatenbankSQL Database

RemarksRemarks

Die von RAISERROR generierten Fehler sind mit Fehlern vergleichbar, die durch den Datenbank-EngineDatabase Engine-Code generiert werden.The errors generated by RAISERROR operate the same as errors generated by the Datenbank-EngineDatabase Engine code. Die von RAISERROR angegebenen Werte werden von den Systemfunktionen ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY, ERROR_STATE und @@ERROR gemeldet.The values specified by RAISERROR are reported by the ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY, ERROR_STATE, and @@ERROR system functions. Wird RAISERROR mit einem Schweregrad von 11 oder höher in einem TRY-Block ausgeführt, wird die Steuerung an den zugeordneten CATCH-Block übertragen.When RAISERROR is run with a severity of 11 or higher in a TRY block, it transfers control to the associated CATCH block. Der Fehler wird an den Aufrufer zurückgegeben, wenn RAISERROR ausgeführt wird:The error is returned to the caller if RAISERROR is run:

  • Außerhalb des Bereichs eines beliebigen TRY-Blocks.Outside the scope of any TRY block.

  • Mit einem Schweregrad von 10 oder tiefer in einem TRY-Block.With a severity of 10 or lower in a TRY block.

  • Mit einem Schweregrad von 20 oder höher, der die Datenbankverbindung beendet.With a severity of 20 or higher that terminates the database connection.

CATCH-Blöcke können mithilfe von RAISERROR den Fehler erneut auslösen, der den CATCH-Block mithilfe von Systemfunktionen wie ERROR_NUMBER und ERROR_MESSAGE aufgerufen hat, um die ursprünglichen Fehlerinformationen abzurufen.CATCH blocks can use RAISERROR to rethrow the error that invoked the CATCH block by using system functions such as ERROR_NUMBER and ERROR_MESSAGE to retrieve the original error information. @@ERROR wird bei Meldungen mit einem Schweregrad von 1 bis 10 standardmäßig auf 0 festgelegt.@@ERROR is set to 0 by default for messages with a severity from 1 through 10.

Gibt msg_id eine benutzerdefinierte Meldung aus der Katalogsicht „sys.messages“ an, verarbeitet RAISERROR die Meldung aus der Textspalte mithilfe derselben Regeln, die auch auf den Text einer mithilfe von msg_str angegebenen benutzerdefinierten Meldung angewendet werden.When msg_id specifies a user-defined message available from the sys.messages catalog view, RAISERROR processes the message from the text column using the same rules as are applied to the text of a user-defined message specified using msg_str. Der Text der benutzerdefinierten Meldung kann Konvertierungsspezifikationen enthalten, und RAISERROR ordnet den Konvertierungsspezifikationen Argumentwerte zu.The user-defined message text can contain conversion specifications, and RAISERROR will map argument values into the conversion specifications. Mithilfe von „sp_addmessage“ können Sie benutzerdefinierte Fehlermeldungen hinzufügen, während mit „sp_dropmessage“ benutzerdefinierte Fehlermeldungen gelöscht werden.Use sp_addmessage to add user-defined error messages and sp_dropmessage to delete user-defined error messages.

RAISERROR kann alternativ zu PRINT für die Rückgabe von Meldungen an aufrufende Anwendungen verwendet werden.RAISERROR can be used as an alternative to PRINT to return messages to calling applications. RAISERROR unterstützt das Ersetzen von Zeichen ähnlich wie die printf-Funktion in der Standardbibliothek für C, während die Transact-SQLTransact-SQL PRINT-Anweisung diese Funktionalität nicht besitzt.RAISERROR supports character substitution similar to the functionality of the printf function in the C standard library, while the Transact-SQLTransact-SQL PRINT statement does not. Die PRINT-Anweisung ist von TRY-Blöcken nicht betroffen. Wird jedoch RAISERROR mit einem Schweregrad von 11 bis 19 in einem TRY-Block ausgeführt, wird die Steuerung an den zugeordneten CATCH-Block übertragen.The PRINT statement is not affected by TRY blocks, while a RAISERROR run with a severity of 11 to 19 in a TRY block transfers control to the associated CATCH block. Geben Sie einen Schweregrad von 10 oder niedriger an, um RAISERROR für die Rückgabe einer Meldung aus einem TRY-Block ohne Aufrufen des CATCH-Blocks zu verwenden.Specify a severity of 10 or lower to use RAISERROR to return a message from a TRY block without invoking the CATCH block.

In der Regel ersetzen aufeinander folgende Argumente aufeinander folgende Konvertierungsspezifikationen. Das erste Argument ersetzt die erste Konvertierungsspezifikation, das zweite Argument ersetzt die zweite Konvertierungsspezifikation usw.Typically, successive arguments replace successive conversion specifications; the first argument replaces the first conversion specification, the second argument replaces the second conversion specification, and so on. In der folgenden RAISERROR-Anweisung ersetzt beispielsweise das erste Argument von N'number' die erste Konvertierungsspezifikation von %s, und das zweite Argument von 5 ersetzt die zweite Konvertierungsspezifikation von %d..For example, in the following RAISERROR statement, the first argument of N'number' replaces the first conversion specification of %s; and the second argument of 5 replaces the second conversion specification of %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  

Wird ein Sternchen (*) entweder für die Breite oder die Genauigkeit einer Konvertierungsspezifikation angegeben, wird der für die Breite oder Genauigkeit zu verwendende Wert als ein ganzzahliger Argumentwert angegeben.If an asterisk (*) is specified for either the width or precision of a conversion specification, the value to be used for the width or precision is specified as an integer argument value. In diesem Fall kann eine Konvertierungsspezifikation bis zu drei Argumente verwenden - jeweils eines für den Breiten-, Genauigkeits- und den Ersetzungswert.In this case, one conversion specification can use up to three arguments, one each for the width, precision, and substitution value.

So geben beispielsweise beide folgenden RAISERROR-Anweisungen dieselbe Zeichenfolge zurück.For example, both of the following RAISERROR statements return the same string. Eine gibt die Breiten- und Genauigkeitswerte in der Argumentliste an, während die andere die Werte in der Konvertierungsspezifikation angibt.One specifies the width and precision values in the argument list; the other specifies them in the conversion specification.

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  

BeispieleExamples

A.A. Zurückgeben von Fehlerinformationen aus einem CATCH-BlockReturning error information from a CATCH block

Im folgenden Codebeispiel wird dargestellt, wie RAISERROR in einem TRY-Block verwendet wird, sodass die Ausführung zum zugeordneten CATCH-Block springt.The following code example shows how to use RAISERROR inside a TRY block to cause execution to jump to the associated CATCH block. Darüber hinaus wird dargestellt, wie RAISERROR verwendet wird, um Informationen zu dem Fehler zurückzugeben, der den CATCH-Block aufgerufen hat.It also shows how to use RAISERROR to return information about the error that invoked the CATCH block.

Hinweis

RAISERROR generiert nur Fehler mit dem Status 1 bis 127.RAISERROR only generates errors with state from 1 through 127. Da Datenbank-EngineDatabase Engine u. U. Fehler mit dem Status 0 ausgibt, wird empfohlen, den von ERROR_STATE zurückgegebenen Fehlerzustand zu überprüfen, bevor Sie ihn als Wert an den Statusparameter von RAISERROR weitergeben.Because the Datenbank-EngineDatabase Engine may raise errors with state 0, we recommend that you check the error state returned by ERROR_STATE before passing it as a value to the state parameter of 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.B. Erstellen einer Ad-hoc-Meldung in sys.messagesCreating an ad hoc message in sys.messages

Im folgenden Beispiel wird dargestellt, wie eine in der Katalogsicht „sys.messages“ gespeicherte Meldung ausgelöst wird.The following example shows how to raise a message stored in the sys.messages catalog view. Die Meldung wurde mithilfe der gespeicherten Systemprozedur sp_addmessage zur Katalogsicht „sys.messages“ als Meldung mit der Meldungsnummer 50005 hinzugefügt.The message was added to the sys.messages catalog view by using the sp_addmessage system stored procedure as message number 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.C. Verwenden einer lokalen Variable zum Angeben des MeldungstextsUsing a local variable to supply the message text

Im folgenden Codebeispiel wird die Verwendung einer lokalen Variablen zum Bereitstellen des Meldungstexts für eine RAISERROR-Anweisung dargestellt.The following code example shows how to use a local variable to supply the message text for a RAISERROR statement.

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  

Weitere InformationenSee Also

Integrierte Funktionen (Transact-SQL) Built-in Functions (Transact-SQL)
DECLARE @local_variable (Transact-SQL) DECLARE @local_variable (Transact-SQL)
PRINT (Transact-SQL) PRINT (Transact-SQL)
sp_addmessage (Transact-SQL) sp_addmessage (Transact-SQL)
sp_dropmessage (Transact-SQL) sp_dropmessage (Transact-SQL)
sys.messages (Transact-SQL) sys.messages (Transact-SQL)
xp_logevent (Transact-SQL) xp_logevent (Transact-SQL)
@@ERROR (Transact-SQL) @@ERROR (Transact-SQL)
ERROR_LINE (Transact-SQL) ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL) ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL) ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL) ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL) ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL) ERROR_STATE (Transact-SQL)
TRY...CATCH (Transact-SQL)TRY...CATCH (Transact-SQL)