How to NOT trap errors in a stored procedure

By Chris Miller on 1 December 2001 | 13 Comments | Tags: Stored Procedures


I was trying to track down an error in one of our internal OLAP collection processes, when I noticed something very peculiar: An insert was failing, appeared to have the proper error trapping, but was not causing an error. How does that work?

Let's say you've got a batch that looks like this:


declare @err int,
@RC int


set @err = 0
set @rc = 0

insert into BigTable
select * from ImportTable

set @RC = @@ROWCOUNT
set @err = @@ERROR

if @@ERROR <> 0
begin
rollback transaction
print 'Transaction Failed'
end

So, what is the value of @err if the INSERT fails? It's the same as the value if the INSERT works. @@ERROR and @@ROWCOUNT are only valid for the statement which executed immediately previous to the use of the variable. So, the @@ERROR was quite unhelpfully trapping any errors which resulted from the assignment of @@ROWCOUNT to @RC. Not exactly as intended. The correct way of writing it is to use SELECT, like this:

select @RC = @@ROWCOUNT, @err = @@ERROR




-rs

Discuss this article: 13 Comments so far. Print this Article.

If you like this article you can sign up for our weekly newsletter. There's an opt-out link at the bottom of each newsletter so it's easy to unsubscribe at any time.

Email Address:

Related Articles

Handling SQL Server Errors (5 April 2010)

Testing with Profiler Custom Events and Database Snapshots (22 June 2009)

Debugging Stored Procedures in Visual Studio 2005 (25 June 2007)

Writing CLR Stored Procedures in C# - Returning Data (Part 2) (23 June 2005)

Writing CLR Stored Procedures in C# - Introduction to C# (Part 1) (6 June 2005)

Managed Data Access Inside SQL Server with ADO.NET and SQLCLR (31 May 2005)

An Evaluation of Stored Procedures for the .NET Developer (22 March 2004)

Run CLR code from a stored procedure (14 October 2003)

Other Recent Forum Posts

SQL 2012 Linked server to MS Access DB (0 Replies)

Import Excel workbook/form into SQL Server (2 Replies)

where to put error handling in cursor? (2 Replies)

Trigger to handle multi - rows (0 Replies)

How to default drop down list to a specific value (3 Replies)

same stored procedures on similar DB delay (3 Replies)

how to handle null values with &gt;= (3 Replies)

Output search criteria for multiple OR (3 Replies)

Subscribe to SQLTeam.com

Weekly SQL Server newsletter with articles, forum posts, and blog posts via email. Subscribers receive our white paper with performance tips for developers.

SQLTeam.com Articles via RSS

SQLTeam.com Weblog via RSS

- Advertisement -