views:

122

answers:

2

BOL states that SQL Server level 10 messages are "Informational messages that return status information or report errors that are not severe."

However these errors seem severe and not informational:

  • 2540 - The system cannot self repair this error.
  • 2745 - Process ID %d has raised user error %d, severity %d. SQL Server is terminating this process.
  • 3606 - Arithmetic overflow occurred.
  • 3607 - Division by zero occurred.

These are just a few of the ones that seem more than just information. They were taken using the following query:

SELECT
message_id,
language_id,
severity,
is_event_logged,
text
FROM sys.messages
WHERE 
language_id = 1033
AND
severity = 10

Why do many SQL Server severity 10 errors actually seem severe?

+1  A: 

Severity can be subjective, in your examples,
- 3606 - Arithmetic overflow occurred.
- 3607 - Division by zero occurred.

Well, these may mean ok to you but to the server, this might snowballed into something severe up to your App's business logic.

Nevertheless, I do agree that some/a lot of the messages (severity aside) are not clear/vaue/ambiguous.

o.k.w
Those two specifically I would consider severe errors. There are counterparts for both of these at the 16 level, which I understand is the most common error. Any idea what makes a level 10 and a level 16 divide-by-zero error different?
Chris Simmons
Well, you might want to evaluate Remus' answer which I feel explained the issue. +1 for him. : )
o.k.w
+3  A: 

The severity in sys.messages is not the actual severity they are raised with.

Remus Rusanu
yes, comes from the RAISERROR statement...
gbn
Interesting. Is there any further documentation/explanation on this behavior? I take it you're not talking about http://msdn.microsoft.com/en-us/library/ms164086.aspx - "For compatibility reasons, the Database Engine converts severity 10 to severity 0 before returning the error information to the calling application."
Chris Simmons
Oh and thanks for the answers, everyone! :)
Chris Simmons