RAISERROR-Transact-SQLRAISERROR-Transact-SQL

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)ouiAzure SQL DatabaseouiAzure SQL Data Warehouse ouiParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Génère un message d'erreur et lance le traitement d'erreur pour la session.Generates an error message and initiates error processing for the session. RAISERROR peut soit faire référence à un message défini par l’utilisateur stocké dans la vue de catalogue sys.messages ou générer un message de manière dynamique.RAISERROR can either reference a user-defined message stored in the sys.messages catalog view or build a message dynamically. Ce message est renvoyé en tant que message d'erreur du serveur à l'application appelante ou à un bloc CATCH associé d'une structure TRY…CATCH.The message is returned as a server error message to the calling application or to an associated CATCH block of a TRY…CATCH construct. Nouvelles applications doivent utiliser lever à la place.New applications should use THROW instead.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

-- 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 ] ]  

ArgumentsArguments

msg_idmsg_id
Un numéro de message d’erreur définis par l’utilisateur est stocké dans la vue de catalogue sys.messages à l’aide de sp_addmessage.Is a user-defined error message number stored in the sys.messages catalog view using sp_addmessage. Les numéros d'erreur des messages d'erreur définis par l'utilisateur doivent être supérieurs à 50 000.Error numbers for user-defined error messages should be greater than 50000. Lorsque msg_id n’est pas spécifié, RAISERROR génère un message d’erreur avec un numéro d’erreur 50 000.When msg_id is not specified, RAISERROR raises an error message with an error number of 50000.

chaîne_du_messagemsg_str
Un message défini par l’utilisateur avec mise en forme est identique à la printf fonction dans la bibliothèque standard C.Is a user-defined message with formatting similar to the printf function in the C standard library. Le message d'erreur peut compter jusqu'à 2 047 caractères.The error message can have a maximum of 2,047 characters. Si le message contient au moins 2 048 caractères, seuls les 2 044 premiers sont affichés et des points de suspension sont ajoutés pour indiquer que le message a été tronqué.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. Notez que les paramètres de substitution utilisent plus de caractères que ce que la sortie affiche en raison de son comportement de stockage interne.Note that substitution parameters consume more characters than the output shows because of internal storage behavior. Par exemple, le paramètre de substitution de %d avec une valeur affectée de 2 produit en fait un caractère dans la chaîne de message, mais prend également jusqu'à trois caractères supplémentaires de stockage.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. Ce besoin de stockage réduit le nombre de caractères disponibles pour le message émis.This storage requirement decreases the number of available characters for message output.

Lorsque chaîne_du_message est spécifié, RAISERROR génère un message d’erreur avec un numéro d’erreur 50 000.When msg_str is specified, RAISERROR raises an error message with an error number of 50000.

chaîne_du_message est une chaîne de caractères avec des spécifications de conversion incorporées facultatives.msg_str is a string of characters with optional embedded conversion specifications. Chaque spécification de conversion définit comment une valeur dans la liste d’arguments est mise en forme et placée dans un champ à l’emplacement de la spécification de conversion dans chaîne_du_message.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. Les spécifications de conversion arborent la mise en forme suivante :Conversion specifications have this format:

% [[indicateur] [largeur] [.% [[flag] [width] [. précision] [{h | l}]] typeprecision] [{h | l}]] type

Les paramètres qui peuvent être utilisés dans chaîne_du_message sont :The parameters that can be used in msg_str are:

indicateurflag

Code qui détermine l'espacement et la justification du message substitué.Is a code that determines the spacing and justification of the substituted value.

CodeCode Préfixe ou justificationPrefix or justification DescriptionDescription
- (moins)- (minus) Cadré à gaucheLeft-justified Cadre la valeur de l'argument à gauche par rapport à la largeur du champ donnée.Left-justify the argument value within the given field width.
+ (plus)+ (plus) Préfixe de l’authentificationSign prefix Fait précéder la valeur de l'argument d'un signe positif (+) ou négatif (-) si celle-ci est de type signé.Preface the argument value with a plus (+) or minus (-) if the value is of a signed type.
0 (zéro)0 (zero) Remplissage avec des zérosZero padding Fait précéder le résultat de zéros jusqu'à atteindre la largeur minimale.Preface the output with zeros until the minimum width is reached. Si zéro et le signe moins (-) sont donnés ensemble, le zéro est ignoré.When 0 and the minus sign (-) appear, 0 is ignored.
# (nombre)# (number) Préfixe 0x pour le type hexadécimal de x ou X0x prefix for hexadecimal type of x or X Lorsqu'il est utilisé avec les formats o, x ou X, le signe dièse # fait précéder n'importe quelle valeur différente de zéro respectivement de 0, 0x ou 0X.When used with the o, x, or X format, the number sign (#) flag prefaces any nonzero value with 0, 0x, or 0X, respectively. Lorsque d, i ou u sont précédés du signe dièse (#), ce dernier est ignoré.When d, i, or u are prefaced by the number sign (#) flag, the flag is ignored.
' ' (vide)' ' (blank) Remplissage avec des espacesSpace padding Fait précéder la valeur de sortie d'espaces si la valeur est signée et positive.Preface the output value with blank spaces if the value is signed and positive. Ceci sera ignoré si un signe positif (+) est inclus dans le drapeau +.This is ignored when included with the plus sign (+) flag.

Largeurwidth

Nombre entier qui définit la largeur minimale du champ dans lequel est placée la valeur de l'argument.Is an integer that defines the minimum width for the field into which the argument value is placed. Si la longueur de la valeur d’argument est égale ou supérieure à largeur, la valeur est imprimée sans marge intérieure.If the length of the argument value is equal to or longer than width, the value is printed with no padding. Si la valeur est inférieure à largeur, la valeur est complétée jusqu'à la longueur spécifiée dans largeur.If the value is shorter than width, the value is padded to the length specified in width.

Un astérisque () signifie que la largeur est spécifiée par l'argument associé dans la liste, qui doit être un nombre entier.An asterisk () means that the width is specified by the associated argument in the argument list, which must be an integer value.

precisionprecision

Nombre maximum de caractères extraits de l'argument pour les chaînes.Is the maximum number of characters taken from the argument value for string values. Par exemple, si une chaîne compte cinq caractères et que la précision est égale à 3, seuls les trois premiers caractères de la chaîne seront utilisés.For example, if a string has five characters and precision is 3, only the first three characters of the string value are used.

Pour les valeurs entières, précision correspond au nombre minimal de chiffres imprimés.For integer values, precision is the minimum number of digits printed.

Un astérisque () signifie que la précision est spécifiée par l'argument associé dans la liste, qui doit être un nombre entier.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

Est utilisé avec les types de caractères d, i, o, s, x, X ou u et crée shortint (h) ou longint des valeurs (l).Is used with character types d, i, o, s, x, X, or u, and creates shortint (h) or longint (l) values.

Spécification de typeType specification ReprésenteRepresents
d ou id or i Entier signéSigned integer
oo Octal non signéUnsigned octal
ss ChaîneString
uu Entier non signéUnsigned integer
x ou Xx or X Hexadécimal non signéUnsigned hexadecimal
Note

Ces spécifications de type sont basées sur celles initialement définies pour le printf fonction dans la bibliothèque standard C.These type specifications are based on the ones originally defined for the printf function in the C standard library. Les spécifications de type utilisées dans le mappage de chaînes de message RAISERROR pour Transact-SQLTransact-SQL des types de données, tandis que les spécifications utilisées dans printf mappés aux types de données du langage C.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. Spécifications de type utilisées dans printf ne sont pas pris en charge par RAISERROR lorsque Transact-SQLTransact-SQL n’est pas un type de données semblable au type de données C associé.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. Par exemple, le %p spécification pour les pointeurs n’est pas prise en charge dans RAISERROR car Transact-SQLTransact-SQL n’est pas un type de données de pointeur.For example, the %p specification for pointers is not supported in RAISERROR because Transact-SQLTransact-SQL does not have a pointer data type.

Note

Pour convertir une valeur pour le Transact-SQLTransact-SQL bigint de type de données, spécifiez % I64d.To convert a value to the Transact-SQLTransact-SQLbigint data type, specify %I64d.

@local_variable@ local_variable
Est une variable de tout type de données de caractères valide qui contient une chaîne mise en forme de la même manière que chaîne_du_message.Is a variable of any valid character data type that contains a string formatted in the same manner as msg_str. @local_variable doit être char ou varchar, ou doit pouvoir être converti implicitement à ces types de données.@local_variable must be char or varchar, or be able to be implicitly converted to these data types.

niveau de gravitéseverity
Représente le niveau de gravité défini par l'utilisateur associé au message en question.Is the user-defined severity level associated with this message. Lorsque vous utilisez msg_id pour déclencher un message défini par l’utilisateur créé à l’aide de sp_addmessage, la gravité spécifiée dans l’instruction RAISERROR remplace celui spécifié dans 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.

Les niveaux de gravité de 0 à 18 peuvent être spécifiés par tout utilisateur.Severity levels from 0 through 18 can be specified by any user. Niveaux de gravité de 19 à 25 peuvent uniquement être spécifiés par les membres du rôle sysadmin du rôle serveur fixé ou les utilisateurs avec des autorisations ALTER TRACE.Severity levels from 19 through 25 can only be specified by members of the sysadmin fixed server role or users with ALTER TRACE permissions. Pour les niveaux de 19 à 25, l'option WITH LOG est nécessaire.For severity levels from 19 through 25, the WITH LOG option is required. Les niveaux de gravité inférieurs à 0 sont interprétés comme 0.Severity levels less than 0 are interpreted as 0. Les niveaux de gravité supérieurs à 25 sont interprétés comme 25.Severity levels greater than 25 are interpreted as 25.

Attention

Les erreurs ayant un niveau compris entre 20 et 25 sont considérées comme irrécupérables.Severity levels from 20 through 25 are considered fatal. Si une erreur de cette gravité se produit, la connexion cliente prend fin après réception du message, et l'erreur est consignée dans le journal des erreurs ainsi que dans le journal des applications.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.

Vous pouvez spécifier -1 pour retourner la valeur de gravité associée à l'erreur, comme le montre l'exemple suivant.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');  

Voici l'ensemble des résultats.Here is the result set.

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

étatstate
Entier compris entre 0 et 255.Is an integer from 0 through 255. Les valeurs négatives par défaut est 1.Negative values default to 1. Valeurs supérieures à 255 ne doivent pas être utilisés.Values larger than 255 should not be used.

Si une même erreur définie par l'utilisateur est générée à plusieurs emplacements, l'utilisation d'un numéro d'état unique pour chaque emplacement peut vous aider à trouver la portion de code à l'origine des erreurs.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
Les paramètres de substitution utilisés pour les variables définies dans chaîne_du_message ou le message correspondant à msg_id.Are the parameters used in the substitution for variables defined in msg_str or the message corresponding to msg_id. Il peut y avoir 0 ou plusieurs paramètres de substitution ; leur nombre total ne peut toutefois pas excéder 20.There can be 0 or more substitution parameters, but the total number of substitution parameters cannot exceed 20. Chaque paramètre de substitution peut être une variable locale ou un de ces types de données : tinyint, smallint, int, char, varchar, nchar, nvarchar, binaire, ou 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. Aucun autre type de données n'est reconnu.No other data types are supported.

optionoption
Option personnalisée pour l'erreur. Peut prendre l'une des valeurs mentionnées dans le tableau ci-après.Is a custom option for the error and can be one of the values in the following table.

ValeurValue DescriptionDescription
LOGLOG Consigne l’erreur dans le journal des erreurs et le journal des applications pour l’instance de la MicrosoftMicrosoft SQL ServerSQL Server Moteur de base de donnéesDatabase Engine.Logs the error in the error log and the application log for the instance of the MicrosoftMicrosoft SQL ServerSQL Server Moteur de base de donnéesDatabase Engine. Les erreurs inscrites dans le journal des erreurs sont actuellement limitées à 440 octets.Errors logged in the error log are currently limited to a maximum of 440 bytes. Seul un membre du rôle serveur fixe sysadmin ou un utilisateur avec des autorisations ALTER TRACE peut spécifier WITH LOG.Only a member of the sysadmin fixed server role or a user with ALTER TRACE permissions can specify WITH LOG.

S’applique à :Applies to: SQL ServerSQL Server, Base de données SQLSQL Database SQL ServerSQL Server, Base de données SQLSQL Database
NOWAITNOWAIT Envoie des messages immédiatement au client.Sends messages immediately to the client.

S’applique à :Applies to: SQL ServerSQL Server, Base de données SQLSQL Database SQL ServerSQL Server, Base de données SQLSQL Database
SETERRORSETERROR Définit le @@ERROR et valeurs ERROR_NUMBER msg_id ou 50 000, quel que soit le niveau de gravité.Sets the @@ERROR and ERROR_NUMBER values to msg_id or 50000, regardless of the severity level.

S’applique à :Applies to: SQL ServerSQL Server, Base de données SQLSQL Database SQL ServerSQL Server, Base de données SQLSQL Database

NotesRemarks

Les erreurs générées par RAISERROR fonctionnent comme des erreurs générées par le Moteur de base de donnéesDatabase Engine code.The errors generated by RAISERROR operate the same as errors generated by the Moteur de base de donnéesDatabase Engine code. Les valeurs spécifiées par RAISERROR sont signalées par les fonctions ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY, ERROR_STATE et @@ERROR fonctions système.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. Lorsque l'instruction RAISERROR est exécutée avec un niveau de gravité de minimum 11 dans un bloc TRY, elle transfère le contrôle au bloc CATCH associé.When RAISERROR is run with a severity of 11 or higher in a TRY block, it transfers control to the associated CATCH block. L'erreur est renvoyée à l'appelant si RAISERROR est exécutée :The error is returned to the caller if RAISERROR is run:

  • en dehors du champ d'un bloc TRY ;Outside the scope of any TRY block.

  • avec un niveau de gravité inférieur ou égal à 10 dans un bloc TRY ;With a severity of 10 or lower in a TRY block.

  • avec un degré de gravité supérieur ou égal à 20 qui met fin à la connexion à la base de données.With a severity of 20 or higher that terminates the database connection.

    Les blocs CATCH peuvent utiliser RAISERROR pour relancer l'erreur qui a appelé le bloc CATCH à l'aide de fonctions système, telles que ERROR_NUMBER et ERROR_MESSAGE, afin de récupérer les données d'erreur originales.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 est définie sur 0 par défaut pour les messages avec un niveau de gravité compris entre 1 et 10.@@ERROR is set to 0 by default for messages with a severity from 1 through 10.

    Lorsque msg_id spécifie un message défini par l’utilisateur disponible à partir de la vue de catalogue sys.messages, processus RAISERROR le message à partir de la colonne de texte utilisant les mêmes règles que celles appliquées au texte d’un message défini par l’utilisateur spécifié à l’aide de chaîne_du_message.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. Le texte du message défini par l'utilisateur peut contenir des spécifications de conversion, dans lesquelles RAISERROR mappera les arguments.The user-defined message text can contain conversion specifications, and RAISERROR will map argument values into the conversion specifications. Utilisez sp_addmessage pour ajouter des messages d’erreur définis par l’utilisateur et sp_dropmessage pour supprimer les messages d’erreur définis par l’utilisateur.Use sp_addmessage to add user-defined error messages and sp_dropmessage to delete user-defined error messages.

    Vous pouvez également utiliser RAISERROR comme alternative à PRINT pour renvoyer des messages aux applications appelantes.RAISERROR can be used as an alternative to PRINT to return messages to calling applications. RAISERROR prend en charge la substitution de caractères, semblable à la fonctionnalité de la printf fonction dans la bibliothèque standard C, tandis que le Transact-SQLTransact-SQL n’est pas le cas de l’instruction PRINT.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. L'instruction PRINT n'est pas affectée par les blocs TRY, alors que si vous exécutez RAISERROR avec un degré de gravité compris entre 11 et 19 dans un bloc TRY, le contrôle est transféré vers le bloc CATCH associé.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. Spécifiez une gravité inférieure ou égale à 10 pour utiliser RAISERROR afin de renvoyer un message depuis un bloc TRY sans appeler le bloc CATCH.Specify a severity of 10 or lower to use RAISERROR to return a message from a TRY block without invoking the CATCH block.

    En règle générale, des arguments successifs remplacent des spécifications de conversion successives ; le premier argument remplace la première spécification de conversion, le deuxième argument remplace la deuxième spécification, etc.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. Par exemple, dans l'instruction RAISERROR suivante, le premier argument N'number' remplace la première spécification de conversion %s et le deuxième argument 5 remplace la deuxième spécification de conversion %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  

Si un astérisque () est spécifié pour la largeur ou la précision d'une spécification de conversion, la valeur à utiliser pour la largeur ou la précision est un nombre entier.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. Dans ce cas, une spécification de conversion peut utiliser jusqu'à trois arguments : un pour la largeur, un pour la précision et un pour la valeur de substitution.In this case, one conversion specification can use up to three arguments, one each for the width, precision, and substitution value.

Par exemple, les deux instructions RAISERROR suivantes renvoient la même chaîne.For example, both of the following RAISERROR statements return the same string. L'une spécifie la largeur et la précision dans la liste d'arguments, tandis que l'autre les indique dans la spécification de conversion.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  

ExemplesExamples

A.A. Renvoi d'informations d'erreur depuis un bloc CATCHReturning error information from a CATCH block

L'exemple de code ci-dessous indique comment utiliser RAISERROR à l'intérieur d'un bloc TRY pour que l'exécution passe au bloc CATCH associé.The following code example shows how to use RAISERROR inside a TRY block to cause execution to jump to the associated CATCH block. Il explique également comment utiliser RAISERROR pour retourner des informations sur l'erreur qui a appelé le bloc CATCH.It also shows how to use RAISERROR to return information about the error that invoked the CATCH block.

Note

RAISERROR génère uniquement des erreurs dont l'état est exclusivement compris entre 1 et 127.RAISERROR only generates errors with state from 1 through 127. Étant donné que la Moteur de base de donnéesDatabase Engine peut déclencher des erreurs dont l’état 0, nous vous recommandons de vérifier l’état d’erreur retourné par ERROR_STATE avant de le transmettre en tant que valeur de paramètre d’état de RAISERROR.Because the Moteur de base de donnéesDatabase 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. Création d'un message approprié dans sys.messagesCreating an ad hoc message in sys.messages

L’exemple suivant montre comment générer un message stocké dans la vue de catalogue sys.messages.The following example shows how to raise a message stored in the sys.messages catalog view. Le message a été ajouté à la vue de catalogue sys.messages à l’aide de la sp_addmessage système des procédure stockée en tant que message numéro 50005.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. Utilisation d'une variable locale pour fournir un texte de messageUsing a local variable to supply the message text

L'exemple de code ci-après montre comment utiliser une variable locale pour fournir un texte de message pour une instruction RAISERROR.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  

Exemples : SQL Data WarehouseSQL Data Warehouse et Parallel Data WarehouseParallel Data WarehouseExamples: SQL Data WarehouseSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

D.D. Renvoi d'informations d'erreur depuis un bloc CATCHReturning error information from a CATCH block

L'exemple de code ci-dessous indique comment utiliser RAISERROR à l'intérieur d'un bloc TRY pour que l'exécution passe au bloc CATCH associé.The following code example shows how to use RAISERROR inside a TRY block to cause execution to jump to the associated CATCH block. Il explique également comment utiliser RAISERROR pour retourner des informations sur l'erreur qui a appelé le bloc CATCH.It also shows how to use RAISERROR to return information about the error that invoked the CATCH block.

Note

RAISERROR génère uniquement des erreurs dont l’état comprise entre 1 et 18.RAISERROR only generates errors with state from 1 through 18. Car le moteur PDW peut déclencher des erreurs avec l’état 0, nous vous recommandons de vérifier l’état d’erreur retourné par ERROR_STATE avant de le transmettre en tant que valeur de paramètre d’état de RAISERROR.Because the PDW 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-18 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;  

    SET @ErrorMessage = ERROR_MESSAGE();  
    SET @ErrorSeverity = ERROR_SEVERITY();  
    SET @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;  

E.E. Utilisation d'une variable locale pour fournir un texte de messageUsing a local variable to supply the message text

L'exemple de code ci-après montre comment utiliser une variable locale pour fournir un texte de message pour une instruction RAISERROR.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  

Voir aussiSee Also

DÉCLARER @local_variable (Transact-SQL) des fonctions intégrées ( Transact-SQL ) DECLARE @local_variable (Transact-SQL) Built-in Functions (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)