Summary: in this tutorial, you will learn how to use the SQL Server RAISERROR
statement to generate user-defined error messages.
If you develop a new application, you should use the THROW
statement instead.
SQL Server RAISEERROR
statement overview
The RAISERROR
statement allows you to generate your own error messages and return these messages back to the application using the same format as a system error or warning message generated by SQL Server Database Engine. In addition, the RAISERROR
statement allows you to set a specific message id, level of severity, and state for the error messages.
The following illustrates the syntax of the RAISERROR
statement:
Let’s examine the syntax of the RAISERROR
for better understanding.
The simplest way reproduce the error is with the following script: DECLARE @DecimalValue DECIMAL(4,2) SET @DecimalValue = 100.00 Since the precision of the. A versatile writer with the vast knowledge of technology helps to reduce the gap between a user and technology. Provides easy and reliable ways to resolve multiple technical issues, which users encounter in their day-to-day life. 20:24:41 Error: 1479, Severity: 16, State: 1. The mirroring connection to 'TCP://1.2.3.5:1234' has timed out for database 'MyDB' after 10 seconds without a response. Server: Msg 174, Level 15, State 1, Line 1 The dateadd function requires 3 argument(s). The DATEADD date function returns a specified date with the specified number interval (signed integer) added to a specified datepart of the input date. Error: 1474, Severity: 16, State: 1. Senior SQL Server DBA/Developer (MCITP (2005), MCAD, OCA 11g) Please click the Mark as Answer button if a post solves your.
message_id
Sql Server Error 1474 State 10th
The message_id
is a user-defined error message number stored in the sys.messages
catalog view.
To add a new user-defined error message number, you use the stored proceduresp_addmessage
. A user-defined error message number should be greater than 50,000. By default, the RAISERROR
statement uses the message_id
50,000 for raising an error.
The following statement adds a custom error message to the sys.messages
view:
To verify the insert, you use the following query:
To use this message_id, you execute the RAISEERROR
statement as follows:
Here is the output:
To remove a message from the sys.messages
, you use the stored procedure sp_dropmessage
. For example, the following statement deletes the message id 50005:
message_text
The message_text
is a user-defined message with formatting like the printf
function in C standard library. The message_text
can be up to 2,047 characters, 3 last characters are reserved for ellipsis (…). If the message_text
contains 2048 or more, it will be truncated and is padded with an ellipsis.
When you specify the message_text
, the RAISERROR
statement uses message_id 50000 to raise the error message.
The following example uses the RAISERROR
statement to raise an error with a message text:
The output will look like this:
severity
The severity level is an integer between 0 and 25, with each level representing the seriousness of the error.
state
The state is an integer from 0 through 255. If you raise the same user-defined error at multiple locations, you can use a unique state number for each location to make it easier to find which section of the code is causing the errors. For most implementations, you can use 1.
WITH option
The option can be LOG
, NOWAIT
, or SETERROR
:
WITH LOG
logs the error in the error log and application log for the instance of the SQL Server Database Engine.WITH NOWAIT
sends the error message to the client immediately.WITH SETERROR
sets theERROR_NUMBER
and@@ERROR
values to message_id or 50000, regardless of the severity level.
SQL Server RAISERROR
examples
Let’s take some examples of using the RAISERROR
statement to get a better understanding.
A) Using SQL Server RAISERROR
with TRY CATCH
block example
Sql Server Error 1474 State 1 4
In this example, we use the RAISERROR
inside a TRY
block to cause execution to jump to the associated CATCH
block. Inside the CATCH
block, we use the RAISERROR
to return the error information that invoked the CATCH
block.
Here is the output:
B) Using SQL Server RAISERROR
statement with a dynamic message text example
The following example shows how to use a local variable to provide the message text for a RAISERROR
statement:
The output is as follows:
When to use RAISERROR
statement
Sql Server Error 1474 State 1017
You use the RAISERROR
statement in the following scenarios:
- Troubleshoot Transact-SQL code.
- Return messages that contain variable text.
- Examine the values of data.
- Cause the execution to jump from a
TRY
block to the associatedCATCH
block. - Return error information from the
CATCH
block to the callers, either calling batch or application.
In this tutorial, you will learn how to use the SQL Server RAISERROR
statement to generate user-defined error messages.
Troubleshooting the following Error:
What I found that many times experiencing this error in SQL Server’s Errorlog, that “Error: 17189” was only a symptom, and that many times the root cause was the line above in SQL Server’s Errorlog.
Case 1:
In the first case shown below, in SQL Server’s Errorlog listed right above the “Error: 17189”, listed were I/O stalls occurring. In this case, the Storage Administrator found that an I/O switch to the SAN was overloaded, which contributed to SQL Server freezing up. Which no logins would occur on the database instance for the next minute.
Sql Server Error 1474 State 1 6
Case 2:
Sql Server Error 1474 State 1007
In this case, the memory was set to high (less of 40% of the memory was used), and the “lock pages in memory” option was not set. The following error kept appearing in SQL Server’s Errorlog :
Error 1474 Severity 16 State 1 Sql Server 2008
By correcting the “max server memory” setting, and setting in the group policy editor to “lock pages in memory”, the “Error: 17189” disappeared.