Skip to content

shannonlowder.com

Menu
  • About
  • Biml Interrogator Demo
  • Latest Posts
Menu

SQL201-On Handling Errors

Posted on September 22, 2011September 22, 2011 by slowder

 

Let’s get back into SQL 200 by learning to deal with errors. Churchill had a great quote that applies to development (database or not) “He who fails to plan is planning to fail.” No matter how well you think you’ve planned your code, it’s going tofail.

 

The question is, will it fail gracefully, or will it EPIC FAIL?

What information can you get on errors?

Whenever you run encounter an error within your T-SQL, you’ll be able to access the
following pieces of information

  • Error Number — every error message in SQL server has to have a unique number to
    idenitify it. Out of the box, they’re all defined. If you want to define custom
    errors, you’ll have to pick a number that’s not in use (a number greater than 50,000).
  • Error Message — The message should be something more meaningful than “An error has
    occurred.” But sometimes they are just that. Google will be your best friend until you
    get a good idea of what the error messages actually mean. Keep in mind how useless some
    error messages can be when you start defining your own errors. Give the user some
    useful information, that way you can solve the problem more quickly in the future.
  • Severity — how bad is it? These severities tell how bad the problem is, You’ll see
    values from 0 – 24. The higher the number, the more severe the error. Severities below
    10 are informational. Errors between 11 and 16 are errors I see most often. Mostly
    because these are the ones I use when raising errors within stored procedures and jobs.
    Severities over 16 require your adminstrator to correct them.
  • Procedure Name — If your error occurs within a stored procedure, function, or
    trigger, the error will tell you which parent object the error occured in. So if you
    have a stored procedure that calls a function, which in turn is called from an ad-hoc
    query, the error raised will tell you if the error was in the function, the stored
    procedure, or the ad-hoc query. Very useful when you’re trying to track down the
    problem!
  • Line Number — Once you know where the error is, for example let’s say the error
    raised says the error is in a stored procedure, the line number will tell you what line
    within that stored procedure errored. I’d like to give you a warning, the line number
    it gives isn’t always the exact line the error occured on, but it will help you figure
    out where to begin your search. I’ve found white space can throw off the line number,
    as well as IF..THEN statements can affect what line number is returned.
  • State — The state is where in the SQL code the error is generated. This points
    more to where SQL errored, and less where your T-SQL code errored. Unless you’re doing
    some pretty deep error handling, I doubt you’ll need this piece of information on your
    errors.

How do you get information on your errors programatically?

Now that you know what all information you can get on your errors, you need to know how
to get at that information. Well, you can use the following stored procedures to get at
the information:

  • ERROR_NUMBER() or @@ERROR
  • ERROR_MESSAGE()
  • ERROR_SEVERITY()
  • ERROR_PROCEDURE()
  • ERROR_LINE()
  • ERROR_STATE()

Whenever you want to grab the different pieces of information on the error that just
occured, use one of these stored procedures (or grab the value of @@ERROR). But there’s
a trick: you have in order to get data out of these stored procedures, you have to be
inside a TRY..CATCH
block. Check out my previous article, for more info on how to set up and use a
TRY..CATCH block.

…and finally


The last topic you’ll need to learn in order to deal with errors is how to raise your
own errors. I’ve covered this in a two articles, and I’m
going to do one more article on RAISERROR to share a larger picture of what all you can
do with your own errors.
But the moral of the story is you can define what an error is. That’s helpful when you
want to build in business logic into your stored procedures. Maybe you want to define a
positive integers only error message. Maybe you need to define what a valid account
number is. With RAISERROR you can build and handle those errors.

If you have any questions on errors, or SQL in general…let me know. I’m here to help!

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • A New File Interrogator
  • Using Generative AI in Data Engineering
  • Getting started with Microsoft Fabric
  • Docker-based Spark
  • Network Infrastructure Updates

Recent Comments

  1. slowder on Data Engineering for Databricks
  2. Alex Ott on Data Engineering for Databricks

Archives

  • July 2023
  • June 2023
  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • October 2018
  • August 2018
  • May 2018
  • February 2018
  • January 2018
  • November 2017
  • October 2017
  • September 2017
  • August 2017
  • June 2017
  • March 2017
  • February 2014
  • January 2014
  • December 2013
  • November 2013
  • October 2013
  • August 2013
  • July 2013
  • June 2013
  • February 2013
  • January 2013
  • August 2012
  • June 2012
  • May 2012
  • April 2012
  • March 2012
  • February 2012
  • January 2012
  • December 2011
  • November 2011
  • October 2011
  • September 2011
  • August 2011
  • July 2011
  • June 2011
  • May 2011
  • April 2011
  • March 2011
  • February 2011
  • January 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • August 2010
  • July 2010
  • June 2010
  • May 2010
  • April 2010
  • March 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009
  • July 2009
  • June 2009
  • May 2009
  • April 2009
  • March 2009
  • February 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • June 2008
  • May 2008
  • April 2008
  • March 2008
  • February 2008
  • January 2008
  • November 2007
  • October 2007
  • September 2007
  • August 2007
  • July 2007
  • June 2007
  • May 2007
  • April 2007
  • March 2007
  • February 2007
  • January 2007
  • December 2006
  • November 2006
  • October 2006
  • September 2006
  • August 2006
  • July 2006
  • June 2006
  • May 2006
  • April 2006
  • March 2006
  • February 2006
  • January 2006
  • December 2005
  • November 2005
  • October 2005
  • September 2005
  • August 2005
  • July 2005
  • June 2005
  • May 2005
  • April 2005
  • March 2005
  • February 2005
  • January 2005
  • November 2004
  • September 2004
  • August 2004
  • July 2004
  • April 2004
  • March 2004
  • June 2002

Categories

  • Career Development
  • Data Engineering
  • Data Science
  • Infrastructure
  • Microsoft SQL
  • Modern Data Estate
  • Personal
  • Random Technology
  • uncategorized
© 2025 shannonlowder.com | Powered by Minimalist Blog WordPress Theme