RAISERROR
|
THROW
|
||
Version
of the Sql Server in which it is introduced?
|
|||
Introduced in SQL
SERVER 7.0. And as per BOL,Microsoft is suggesting to start using
THROW statement instead of RAISERROR in New Applications.
RAISERROR can’t be
used in the Sql Server 2014’s Natively compiled Stored Procedures.
|
Introduced in SQL
SERVER 2012. THROW statement seems to be simple and easy to use than
RAISERROR.
THROW statement can
be used in the Sql Server 2014’s Natively Compiled Stored Procedure.
|
||
Can re-throw the original exception that
invoked the CATCH block?
|
|||
NO. It always generates new exception and
results in the loss of the original exception details. Below example
demonstrates this:
RESULT:
Msg 50000, Level 16, State 1, Line 19 Divide by zero error encountered. |
YES. To Re-THROW the original exception
caught in the TRY Block, we can just specify the THROW statement without any
parameters in the CATCH block. Below example demonstrates this:
RESULT:
Msg 8134, Level 16, State 1, Line 4 Divide by zero error encountered.
With above example
it is clear that THROW statement is very simple for RE-THROWING the
exception. And also it returns correct error number and line number.
|
||
Causes the statement batch to be ended?
|
|||
Example: In the below example all the
statement’s after RAISERROR statement are executed.
RESULT:
BEFORE RAISERROR Msg 50000, Level 16, State 1, Line 19 Divide by zero error encountered. AFTER RAISERROR AFTER CATCH |
Example: In the below example no PRINT
statement’s after THROW statement are executed.
RESULT:
BEFORE THROW Msg 8134, Level 16, State 1, Line 2 Divide by zero error encountered. |
||
CAN SET SEVERITY LEVEL?
|
|||
YES. The severity parameter specifies the
severity of the exception.
|
NO. There is no severity parameter. The
exception severity is always set to 16. (unless re-throwing in a CATCH block)
|
||
Requires preceding statement to end with
semicolon (;) statement terminator?
|
|||
NO.
|
YES. The statement before the THROW
statement must be followed by the semicolon (;) statement terminator.
|
||
CAN RAISE SYSTEM ERROR MESSAGE?
The SYS.MESSAGES Table will have both system-defined and user-defined messages. Message IDs less than 50000 are system messages. |
|||
YES. With RAISERROR we can raise the System
Exception.
|
NO. With THROW we can’t raise the System
Exception. But when it used in CATCH BLOCK it can Re-THROW the system
exception.
THROW 40655, ‘Database master cannot be restored.’, 1
RESULT:
Msg 35100, Level 16, State 10, Line 1 Error number 40655 in the THROW statement is outside the valid range. Specify an error number in the valid range of 50000 to 2147483647 |
||
CAN RAISE user-defined message with
message_id greater than 50000 which is not defined in SYS.MESSAGES
table?
|
|||
NO. If a msg_id
is passed to RAISERROR, the ID must be defined in sys.messages.
|
YES. The error_number parameter does not have to
be defined in sys.messages.
|
Monday, March 9, 2015
RaiseError Vs Throw : Exception Handling
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment