Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When to use Transactions in SQL Server

There are lots and lots of questions on HOW to use Transactions. What I want to know is WHEN? Under what circumstances? What types of queries? Can Try-Catch blocks suffice instead? Etc...

I've designed a database with ~20 tables and ~20 stored procedures. Currently none of my SPs use a transaction, but there are numerous Try-Catch blocks throughout. The reason is because every time I tried to wrap them in a transaction the SP would cease to function and I would end up with missing data and worse off than had I used Trans.

So again...

  1. When is an appropriate time to use a Transaction?
  2. As a follow-up question, if I use them, how can I use them in such a way as to ONLY prevent other SPs from accessing the same data at the same time in order to prevent corruption rather than causing my SPs to not function at all?

Here's a little sample SP I wrote for renaming a product:

CREATE PROCEDURE spRenameProduct     @pKey int = NULL,     @pName varchar(50) AS BEGIN     BEGIN TRY         IF LTRIM(RTRIM(@pName)) = '' SET @pName = NULL         IF NOT @pKey IS NULL AND NOT @pName IS NULL BEGIN             declare @pKeyExisting int = (select MIN(ID) from rProduct where Product like @pName and not ID = @pKey)             IF @pKeyExisting is null BEGIN                 update rProduct set IsValid = 1, Product = @pName where ID = @pKey             END ELSE BEGIN                 update Request set ProductID = @pKeyExisting where ProductID = @pKey                 update StatusReport set ProductID = @pKeyExisting where ProductID = @pKey                 delete from rProduct where ID = @pKey             END         END     END TRY BEGIN CATCH END CATCH END 

Now what if two people were using this at the exact same time? I really don't want to, nor do I have time (unfortunately), to get to fancy. K.I.S.S. is best in this case. :)

like image 949
Chiramisu Avatar asked Feb 16 '12 19:02

Chiramisu


People also ask

When should I use transactions?

You use transactions when you have a group of actions that must be atomic (either all succeed or none succeed) Wrapping these actions in a transaction allows you to rollback actions that have already succeeded when you encounter an error.

What do transactions do in SQL?

The main idea of transactions is that when each of the statements returns an error, the entire modifications rollback to provide data integrity. On the other hand, if all statements are completed successfully the data modifications will become permanent on the database.

Why do we need transaction in database?

The primary benefit of using transactions is data integrity. Many database uses require storing data to multiple tables, or multiple rows to the same table in order to maintain a consistent data set. Using transactions ensures that other connections to the same database see either all the updates or none of them.


1 Answers

You use transactions when the set of database operations you are making needs to be atomic.

That is - they all need to succeed or fail. Nothing in between.

Transactions are to be used to ensure that the database is always in a consistent state.

In general, unless there is a good reason not to use them (long running process for instance), use them. See this blog post for details.


Try/Catch blocks have nothing to do with transactions - they are used for exception handling. The two concepts are not related and are not replacements for each other.

like image 132
Oded Avatar answered Oct 01 '22 22:10

Oded