Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member

Creating transactions

From: SQL Server 2008 Essential Training

Video: Creating transactions

So I'm going to take this stored procedure a little further. The stored procedure I'm working with right now has three INSERT statements. It inserts an entry into the ProductModel table, it inserts a ProductDescription, and then it inserts a row that hopefully joins these two new rows together. Okay, so let's see it work. I'm going to flip over to where I have a prewritten piece of SQL that will execute that stored procedure, passing in ABCD123, and ABCD123 product description.

Creating transactions

So I'm going to take this stored procedure a little further. The stored procedure I'm working with right now has three INSERT statements. It inserts an entry into the ProductModel table, it inserts a ProductDescription, and then it inserts a row that hopefully joins these two new rows together. Okay, so let's see it work. I'm going to flip over to where I have a prewritten piece of SQL that will execute that stored procedure, passing in ABCD123, and ABCD123 product description.

So I execute that code. We get a result, the Command(s) completed successfully. To double check that, I have a little bit of code over here that's simply selecting the most recently added row to each of those three tables. I'll run that. And I get what I hoped for, that the first row that was added was for ProductModelID 139, so that primary key was generated, ABCD123. We have the Description that's under 2016, and ABCD123 product description, and then we have the third row that is joining 139 to the first row and 2016 to the second.

So everything looks correctly happened and in the right order. Here is the issue. What happens if I run that again? Well, it should work just fine, right? I execute it. Well, we have a problem going on here. The message isn't all that friendly, but it's telling me there is a Violation of UNIQUE KEY constraint. Cannot insert duplicate key in object SalesLT.ProductModel. Maybe I'm getting this message and I'm the developer and I know what that means. It's not the friendliest thing in the world, and here is the issue. If I go back and run this code again to see the most recently added records, what I'm going to see is that the row for ProductModel will nothing got added with that second call there.

The issue is that there is a constraint on the table that says this name must be unique. So we didn't get a new entry. Having said that, the problem is we did get a new row for the Description. Because the last time around, it was 2016. We now have a new row in there with this Description, but it won't be connected to anything because we couldn't insert the first one, and because we didn't get the first one done, we didn't get the third one done either, because there was no ProductModelID to insert. So they're all now out of step.

We've got a bit of a problem. We have this orphaned record hanging around. We'd have to go in and manually hook up. Well, what can we do with that? Well, really the deal is this. I want my stored procedure to work completely. I want either all three of these inserts to occur correctly or not at all. There are a couple of steps of doing that. Let's do step one. It's very, very simple. What I'm going to do is surround my three INSERT statements with BEGIN TRAN.

It doesn't have to be in uppercase, but that's by convention, and COMMIT TRAN. So we're beginning the transaction. We're going to try and do the first INSERT, then the second INSERT, then the third INSERT. Hopefully, by the time we get past it, we're going to commit those changes to the database. So this is just the edited SQL for altering that stored procedures. So I'm going to execute that. Command completed successfully, looks good. Let's go over to this and we're going to shake up this entry a little bit.

Let's say we're now trying to enter in a couple of other things here. We're entering a model description for DEF123, just so we can be sure that that's unique. I'll execute that. Command completed successfully. Go back over and check what the three most recent rows were. We have 141 for DEF123, 2018 for DEF123, and then 141 and 2018 joined. Looks good. Now, here is the proof. Let's try and run this because we have the transaction around them. I execute it.

Okay, we have the error. That's to be expected. Just having a transaction doesn't mean that there wasn't a problem. We have a problem. We're trying to insert a duplicate key into the ProductModel. Here is the question though. What happened? Well, if I go over and run this code again, we're actually running into this situation. 141. Okay, that was the one from the previous time. We didn't get one inserted there, but we did get a new one inserted here, because if you look at the last entry on the joining table, it was 141 to 2018.

We've now got 141, but we have a 2019. So, what's going on? Here is the problem. Just because we said that we wanted to work with the transactions and we surrounded our three statements with this BEGIN TRAN and COMMIT TRAN, well, that doesn't really mean anything. Because just because there was a problem, well, we didn't actually tell it that we wanted to roll anything back. So here is what we do instead. Now to make this a little bit more readable, I'm just going to get rid of a couple of the blank lines here.

Before I do my BEGIN TRAN, I'm going to write this. BEGIN TRY and END TRY. Now these officially don't have to be nested, but to make it a bit more readable, I'll do that. So we open up what's called a TRY block. Our TRY block means we're trying things from the opening of the TRY to the end of the TRY. That's where we're trying to do our transaction. The flipside of that is that if there is a problem, what happens is our TRY block is going to leap out and go looking for a CATCH block.

What I need to do in here is say this. I want to ROLLBACK the transaction, which will just reverse anything that happened inside the BEGIN TRAN and COMMIT TRAN keywords. What would also be useful is if I do a little bit of the tracing information. I'll print out a message that says there was an error. That won't be all that helpful so I better output a little bit more and this is the way I would do that. I'm going to use one of the built-in functions called ERROR_MESSAGE ().

This only works if you use ERROR_MESSAGE inside a CATCH block. It's only actually ever going to have anything if there was a problem. So this has changed the stored procedure. Now I'm going to of course execute that to make sure that the database knows that the stored procedure has been changed. So again, we need to go back and test it and check it. I'm going to jump across here in the first try and make one that works. Let's verify that everything is actually working okay. We're going to try and enter in the GHI123 and GHI123 product description. Execute.

Come over and check the recently retrieved records, and we have 143, GHI123. 2020, GHI123. [00:07:20.00 ] 143, 2020. So the hope that I would have is if I go back and run that stored procedure exactly the same as it was, then when I come back to this page, I see exactly the same thing. I don't suddenly get an extra ProductDescription row in there. Let's go and find out. We jump across.

Again, I am executing this again. Just because we have a transaction doesn't mean there isn't a problem. There is. Execute. There we go. We can see that we jump to our CATCH block. I've got there was an error. Then the message that pops out says Violation of UNIQUE KEY constraint, Cannot insert duplicate key in object SalesLT.ProductModel. Same problem. We want to see if there is a different behavior now. So hopefully, we'll see 143, 2020, and 143, 2020 when I execute this. We run it, and yes indeed, 143, 2020, 143 and 2020.

Because of having those BEGIN TRAN and COMMIT TRAN inside the TRY block, and then catching it, rolling it back, and printing out the message, we've managed to roll back all those changes. So, very easy to start to wrap your different blocks of SQL with that TRY and TRAN in a very controllable way of handling that stuff.

Show transcript

This video is part of

Image for SQL Server 2008 Essential Training
SQL Server 2008 Essential Training

74 video lessons · 36348 viewers

Simon Allardice
Author

 
Expand all | Collapse all
  1. 2m 21s
    1. Welcome
      1m 19s
    2. Using the exercise files
      1m 2s
  2. 17m 58s
    1. SQL Server core concepts
      9m 4s
    2. SQL Server editions
      3m 8s
    3. Applications included with SQL Server
      5m 46s
  3. 26m 1s
    1. Preparing for installation
      3m 44s
    2. Creating service accounts
      2m 33s
    3. Installing SQL Server
      11m 42s
    4. Post-installation checks
      3m 9s
    5. Installing sample databases
      4m 53s
  4. 13m 35s
    1. Introduction to SQL Server Management Studio
      8m 7s
    2. Introduction to SQL Server Books Online
      3m 6s
    3. SQL Server system databases
      2m 22s
  5. 1h 26m
    1. Planning your database
      9m 39s
    2. Creating a SQL Server database
      4m 7s
    3. Creating tables
      7m 51s
    4. Data types in SQL Server
      12m 25s
    5. Defining keys
      8m 9s
    6. Creating default values
      4m 39s
    7. Creating check constraints
      2m 25s
    8. Creating unique constraints
      4m 34s
    9. Introduction to relationships and foreign keys
      9m 51s
    10. Creating relationships in SQL Server Management Studio
      8m 14s
    11. Database normalization
      11m 47s
    12. Creating computed columns
      3m 10s
  6. 23m 11s
    1. Using the SQL Server Import and Export Wizard
      3m 58s
    2. Importing Excel files into SQL Server
      6m 11s
    3. Importing CSV files into SQL Server
      5m 27s
    4. Importing Access databases into SQL Server
      7m 35s
  7. 55m 29s
    1. Introduction to Transact-SQL
      3m 43s
    2. Using SELECT statements
      7m 16s
    3. Changing the default database
      2m 21s
    4. Creating conditions in SQL
      8m 10s
    5. Sorting your output
      3m 23s
    6. Using aggregate functions
      7m 12s
    7. Finding unique values
      2m 14s
    8. Joining multiple tables together
      8m 0s
    9. Using subqueries
      9m 33s
    10. Viewing execution plans
      3m 37s
  8. 19m 36s
    1. Writing INSERT statements
      5m 47s
    2. Writing UPDATE statements
      4m 38s
    3. Writing DELETE statements
      2m 54s
    4. Using the OUTPUT clause to return inserted keys and GUIDs
      6m 17s
  9. 32m 52s
    1. Introduction to SQL functions
      6m 26s
    2. Using SQL configuration functions
      2m 14s
    3. Using string functions
      7m 26s
    4. Using date functions
      6m 27s
    5. Creating user-defined functions
      10m 19s
  10. 28m 46s
    1. Introduction to stored procedures
      4m 23s
    2. Creating stored procedures
      11m 23s
    3. Introducing transactions
      4m 23s
    4. Creating transactions
      8m 37s
  11. 16m 39s
    1. Understanding and creating indexes
      6m 32s
    2. Monitoring and rebuilding indexes
      6m 0s
    3. Monitoring database size and integrity
      4m 7s
  12. 11m 41s
    1. Creating backups
      4m 21s
    2. Creating differential backups and using backup compression
      3m 40s
    3. Restoring databases
      3m 40s
  13. 17m 40s
    1. Introduction to SQL Server security and permissions
      5m 54s
    2. Adding a Windows user to the database
      5m 7s
    3. Creating SQL Server logins and switching authentication modes
      6m 39s
  14. 36m 41s
    1. Introduction to SQL Server Reporting Services
      2m 52s
    2. Connecting to the Report Manager
      4m 29s
    3. Using Report Builder
      12m 4s
    4. Formatting values in reports
      4m 17s
    5. Adding indicators to reports
      5m 11s
    6. Adding charts to reports
      3m 54s
    7. Working with report security
      3m 54s
  15. 24m 41s
    1. Introduction to SQL Server Integration Services (SSIS)
      1m 57s
    2. Using Business Intelligence Development Studio (BIDS)
      6m 59s
    3. Creating and executing a simple SSIS package
      7m 35s
    4. Importing packages into SQL Server Management Studio
      3m 21s
    5. Scheduling jobs with SQL Server Agent
      4m 49s
  16. 31s
    1. Goodbye
      31s

Start learning today

Get unlimited access to all courses for just $25/month.

Become a member
Sometimes @lynda teaches me how to use a program and sometimes Lynda.com changes my life forever. @JosefShutter
@lynda lynda.com is an absolute life saver when it comes to learning todays software. Definitely recommend it! #higherlearning @Michael_Caraway
@lynda The best thing online! Your database of courses is great! To the mark and very helpful. Thanks! @ru22more
Got to create something yesterday I never thought I could do. #thanks @lynda @Ngventurella
I really do love @lynda as a learning platform. Never stop learning and developing, it’s probably our greatest gift as a species! @soundslikedavid
@lynda just subscribed to lynda.com all I can say its brilliant join now trust me @ButchSamurai
@lynda is an awesome resource. The membership is priceless if you take advantage of it. @diabetic_techie
One of the best decision I made this year. Buy a 1yr subscription to @lynda @cybercaptive
guys lynda.com (@lynda) is the best. So far I’ve learned Java, principles of OO programming, and now learning about MS project @lucasmitchell
Signed back up to @lynda dot com. I’ve missed it!! Proper geeking out right now! #timetolearn #geek @JayGodbold
Share a link to this course

What are exercise files?

Exercise files are the same files the author uses in the course. Save time by downloading the author's files instead of setting up your own files, and learn by following along with the instructor.

Can I take this course without the exercise files?

Yes! If you decide you would like the exercise files later, you can upgrade to a premium account any time.

Become a member Download sample files See plans and pricing

Please wait... please wait ...
Upgrade to get access to exercise files.

Exercise files video

How to use exercise files.

Learn by watching, listening, and doing, Exercise files are the same files the author uses in the course, so you can download them and follow along Premium memberships include access to all exercise files in the library.


Exercise files

Exercise files video

How to use exercise files.

For additional information on downloading and using exercise files, watch our instructional video or read the instructions in the FAQ.

This course includes free exercise files, so you can practice while you watch the course. To access all the exercise files in our library, become a Premium Member.

Join now "Already a member? Log in

Are you sure you want to mark all the videos in this course as unwatched?

This will not affect your course history, your reports, or your certificates of completion for this course.


Mark all as unwatched Cancel

Congratulations

You have completed SQL Server 2008 Essential Training.

Return to your organization's learning portal to continue training, or close this page.


OK
Become a member to add this course to a playlist

Join today and get unlimited access to the entire library of video courses—and create as many playlists as you like.

Get started

Already a member?

Become a member to like this course.

Join today and get unlimited access to the entire library of video courses.

Get started

Already a member?

Exercise files

Learn by watching, listening, and doing! Exercise files are the same files the author uses in the course, so you can download them and follow along. Exercise files are available with all Premium memberships. Learn more

Get started

Already a Premium member?

Exercise files video

How to use exercise files.

Ask a question

Thanks for contacting us.
You’ll hear from our Customer Service team within 24 hours.

Please enter the text shown below:

The classic layout automatically defaults to the latest Flash Player.

To choose a different player, hold the cursor over your name at the top right of any lynda.com page and choose Site preferencesfrom the dropdown menu.

Continue to classic layout Stay on new layout
Exercise files

Access exercise files from a button right under the course name.

Mark videos as unwatched

Remove icons showing you already watched videos if you want to start over.

Control your viewing experience

Make the video wide, narrow, full-screen, or pop the player out of the page into its own window.

Interactive transcripts

Click on text in the transcript to jump to that spot in the video. As the video plays, the relevant spot in the transcript will be highlighted.

Are you sure you want to delete this note?

No

Your file was successfully uploaded.

Thanks for signing up.

We’ll send you a confirmation email shortly.


Sign up and receive emails about lynda.com and our online training library:

Here’s our privacy policy with more details about how we handle your information.

Keep up with news, tips, and latest courses with emails from lynda.com.

Sign up and receive emails about lynda.com and our online training library:

Here’s our privacy policy with more details about how we handle your information.

   
submit Lightbox submit clicked
Terms and conditions of use

We've updated our terms and conditions (now called terms of service).Go
Review and accept our updated terms of service.