# Exercise: Use output parameters in a procedure to count two sets of rows

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 course listed below!

 Category ==> SQL  (192 exercises) Topic ==> Parameters and return values  (11 exercises) Level ==> Harder than average 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.

The aim of this exercise is to create a stored procedure called spGoodAndBad which shows the number of Doctor Who's companions and enemies for a given series number.  For example, you could run this SQL:

-- choose series number for which to display info

DECLARE @SeriesNumber int = 1

DECLARE @NumEnemies int

DECLARE @NumCompanions int

EXEC spGoodAndBad @SeriesNumber, @NumEnemies output, @NumCompanions output

-- show the results

SELECT

@SeriesNumber AS 'Series number',

@NumEnemies AS 'Number of enemies',

@NumCompanions AS 'Number of companions'

This should give the following output:

For series 1, the Doctor met 8 distinct enemies and had 3 distinct companions.

Now all that you have to do is to write the stored procedure with one input and two output parameters!

The answers uses SELECT COUNT(DISTINCT EnemyId) and SELECT COUNT(DISTINCT CompanionID), although there may well be other ways to skin this proecedural cat.

After testing your procedure with different series numbers, optionally save it as Good and bad.sql, then close it down.