Exercise: Populate a column, then (maybe) roll back the transaction

This exercise is provided to allow potential course delegates to choose the correct Wise Owl Microsoft training course, and may not be reproduced in whole or in part in any format without the prior written consent of Wise Owl.

The answer to the exercise will be included and explained if you attend the Wise Owl course listed below!

Category ==> SQL  (115 exercises)
Topic ==> Transactions  (4 exercises)
Level ==> Average difficulty
Course ==> Advanced SQL
Before you can do this exercise, you'll need to download and unzip this file (if you have any problems doing this, click here for help).

You need a minimum screen resolution of about 700 pixels width to see our exercises. This is because they contain diagrams and tables which would not be viewable easily on a mobile phone or small laptop. Please use a larger tablet, notebook or desktop computer, or change your screen resolution settings.

First (if you haven't already done so) run the script shown above to generate the Doctor Who training database.

Type in and run the following script to generate a new column called NumberEnemies in the tblEpisode table:

ALTER TABLE tblEpisode

ADD NumberEnemies int

Write an update query which will set this column to equal the number of enemies for each episode (but within a transaction), then:

  • Roll back this transaction if more than 100 rows are affected (displaying a suitable message, as shown overleaf); or
  • Commit it otherwise and show a list of all of the episodes, including the newly populated field.

Use @@RowCount to see how many rows are affected, but don't forget to store this in a variable immediately after running the update so that its value doesn't get overwritten.

Note that the syntax of the update query is nasty:

-- set the number of enemies for each episode

UPDATE

tblEpisode

SET

NumberEnemies = (

SELECT

COUNT(*)

FROM

tblEpisodeEnemy AS ee

WHERE

ee.EpisodeId = e.EpisodeId

)

FROM

tblEpisode AS e

 When you run this query, you should see something like this:

Error message

Because 117 rows were updated, your query should roll back the transaction.

 

Now change the threshold in the query from 100 to 120 and re-run it.  This time the query should update the column, and display the results:

Episodes and number of enemies

You have to wait until episode id 15 to get more than one enemy (at which point 3 come along at once).

When you've got this working, optionally save your query as Counting your enemies.sql, then close it down.

This page has 0 threads Add post