February 20, 2013 at 11:07 am
Thanks for the 2012 question.
February 20, 2013 at 11:18 am
batgirl (2/20/2013)
I'm having a senior blonde moment here...What is the difference between:
THROW returns the same error message as the select statement
and
THROW returns the error message "why oh why do you do this"
The SELECT statement returns one row with four columns. The value in the unnamed fourth column is the text returned by the ERROR_MESSAGE() function, i.e., the standard "violation of primary key" message.
The THROW statement doesn't return rows but generates a message that includes the string 'why oh why do you do this', which was the [message] argument to the THROW statement.
THROW therefore does not return the same "error message" as the SELECT, but does return "why oh why do you do this".
Does that clear it up?
Jason Wolfkill
February 20, 2013 at 11:40 am
wolfkillj (2/20/2013)
batgirl (2/20/2013)
I'm having a senior blonde moment here...What is the difference between:
THROW returns the same error message as the select statement
and
THROW returns the error message "why oh why do you do this"
The SELECT statement returns one row with four columns. The value in the unnamed fourth column is the text returned by the ERROR_MESSAGE() function, i.e., the standard "violation of primary key" message.
The THROW statement doesn't return rows but generates a message that includes the string 'why oh why do you do this', which was the [message] argument to the THROW statement.
THROW therefore does not return the same "error message" as the SELECT, but does return "why oh why do you do this".
Does that clear it up?
Yes - I was woefully short on caffeine when I wondered this.
Some days "senior" and "blonde" is an insurmountable combination 😀
Thanks so much!
February 20, 2013 at 12:49 pm
wolfkillj (2/20/2013)
L' Eomot Inversé (2/20/2013)
Nice interesting question.I really must upgrade and get SQL2012 so that I can start playing with this stuff instead of just reading about it.
If people have run the code and got 14 for erros state, what's going on? I would expect to see 14 only if THROW was called without any parameters (to rethrow the previous error).
I think people said they got severity level 14, not error state 14. They must be looking at the results of the SELECT in the CATCH block, which does show Level = 14, rather than the error message returned by the THROW statement, which always shows "Level 16" as its defined behavior.
Hey from BOL, I was infering that when THROW is used in a catch block without any parameters, it returns the level of the actual error raised in the try block and not 16...
Please let me know if I am right?
___________________________________________________________________
If I can answer a question then anyone can answer it..trying to reverse the logic.. :hehe:
February 20, 2013 at 1:58 pm
venkat9.sql (2/20/2013)
wolfkillj (2/20/2013)
L' Eomot Inversé (2/20/2013)
Nice interesting question.I really must upgrade and get SQL2012 so that I can start playing with this stuff instead of just reading about it.
If people have run the code and got 14 for erros state, what's going on? I would expect to see 14 only if THROW was called without any parameters (to rethrow the previous error).
I think people said they got severity level 14, not error state 14. They must be looking at the results of the SELECT in the CATCH block, which does show Level = 14, rather than the error message returned by the THROW statement, which always shows "Level 16" as its defined behavior.
Hey from BOL, I was infering that when THROW is used in a catch block without any parameters, it returns the level of the actual error raised in the try block and not 16...
Please let me know if I am right?
I don't think that's right. BOL specifies that THROW can be called without parameters only in a CATCH block, and also that severity is ALWAYS set to 16 with THROW.
Source: http://msdn.microsoft.com/en-us/library/ee677615.aspx
Jason Wolfkill
February 20, 2013 at 2:54 pm
wolfkillj (2/20/2013)
venkat9.sql (2/20/2013)
wolfkillj (2/20/2013)
L' Eomot Inversé (2/20/2013)
Nice interesting question.I really must upgrade and get SQL2012 so that I can start playing with this stuff instead of just reading about it.
If people have run the code and got 14 for erros state, what's going on? I would expect to see 14 only if THROW was called without any parameters (to rethrow the previous error).
I think people said they got severity level 14, not error state 14. They must be looking at the results of the SELECT in the CATCH block, which does show Level = 14, rather than the error message returned by the THROW statement, which always shows "Level 16" as its defined behavior.
Hey from BOL, I was infering that when THROW is used in a catch block without any parameters, it returns the level of the actual error raised in the try block and not 16...
Please let me know if I am right?
I don't think that's right. BOL specifies that THROW can be called without parameters only in a CATCH block, and also that severity is ALWAYS set to 16 with THROW.
Source: http://msdn.microsoft.com/en-us/library/ee677615.aspx
No, Venkat has it right.
BoL is quite clear that when throw is called without parameters it rethrows the error that caused the catch block to be entered. There's even an example on the BoL page you refrence that has it produciing severity 14. Severity 16 occurs whenever a new error is thrown (ie throw has parameters), but not when the existing error is rethrown (ie throw has no parameters); it would make no sense to supply severity 16 when re-throwing a caught error which has a different severity.
Tom
February 21, 2013 at 4:14 am
Really have to get working on 2012. Don't have access to it currently and I can see the QotDs are moving more and more to it. Thanks for the question.
February 25, 2013 at 10:19 am
Nice Message
Jason...AKA CirqueDeSQLeil
_______________________________________________
I have given a name to my pain...MCM SQL Server, MVP
SQL RNNR
Posting Performance Based Questions - Gail Shaw[/url]
Learn Extended Events
February 25, 2013 at 7:35 pm
Nice question..
Thanks..
June 15, 2015 at 3:34 pm
why not error level = 14 and state =1 ??
Thanks.
June 25, 2015 at 12:31 am
I never did a create + insert with a catch.
But that works. If you build it in dynamic SQL it can be worthfull.
Thanks.
Viewing 11 posts - 16 through 25 (of 25 total)
You must be logged in to reply to this topic. Login to reply