EXERCISE TOPIC▼
SQL EXERCISES▼
SQL EXERCISES▼
- Simple Queries (4)
- Setting criteria using WHERE (5)
- Calculations (7)
- Calculations using dates (4)
- Basic joins (8)
- More exotic joins (2)
- Aggregation and grouping (8)
- Views (5)
- Subqueries (5)
- Stored procedures (5)
- Variables (8)
- Parameters and return values (11)
- Testing conditions (1)
- Looping (3)
- Scalar functions (6)
- Transactions (5)
- Creating tables (5)
- Temporary tables and table variables (9)
- Table-valued functions (6)
- Derived tables and CTEs (13)
- Dynamic SQL (4)
- Pivots (2)
- Triggers (2)
- Archived (70)
SQL | Transactions 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.
You can learn how to do this exercise if you attend one of more of the courses listed below!
Software ==> | SQL (198 exercises) |
Version ==> | Any version of SQL Server |
Topic ==> | Transactions (5 exercises) |
Level ==> | Average difficulty |
Courses ==> | Fast-track SQL / Advanced SQL |
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 below); 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:

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:

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.