THROW - 1

  • Thanks for the 2012 question.

  • 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

  • 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!

  • 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:

  • 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

  • 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

  • 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.

  • 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

  • Nice question..

    Thanks..

  • why not error level = 14 and state =1 ??

    Thanks.

  • 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