SQL Server 2008 Essential Training
Illustration by Mark Todd

Creating stored procedures


SQL Server 2008 Essential Training

with Simon Allardice

Start your free trial now, and begin learning software, business and creative skills—anytime, anywhere—with video instruction from recognized industry experts.

Start Your Free Trial Now

Video: Creating stored procedures

The process of creating a stored procedure is quite similar to that of doing a function, or indeed of defining any procedure, function, or method in any other programming language. We're going to name it. We have to give it a name. We're going to define any parameters that it takes. We're going to actually describe what it does, which in our case will be run either a single SQL statement or even batches of T-SQL. And then return any values, describe what it is that gets sent back. So how do we do that? Well, luckily, SQL Server Management Studio has some helpers for us.
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. Using subqueries
      9m 33s
    9. Joining multiple tables together
      8m 0s
    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

please wait ...
Watch the Online Video Course SQL Server 2008 Essential Training
6h 54m Beginner Dec 15, 2010

Viewers: in countries Watching now:

In SQL Server 2008 Essential Training, Simon Allardice explores all the major features of SQL Server 2008 R2, beginning with core concepts: installing, planning, and building a first database. Explore how Transact-SQL is used to retrieve, update, and insert information, and gain insight into how to effectively administer databases. The course also covers features outside SQL Server's database engine, including technologies that have grown up around it: SQL Server Reporting Services and Integration Services. Exercise files are included with the course.

Topics include:
  • Using T-SQL (Transact-SQL)
  • Managing databases with SQL Server Management Studio
  • Understanding database normalization
  • Using SELECT statements
  • Building indexes
  • Monitoring database size and integrity
  • Backing up and restoring databases
  • Creating functions and stored procedures
  • Managing database permissions
  • Creating and formatting reports
  • Adding charts to reports
  • Creating and executing a simple SSIS package
Business Developer IT
SQL Server
Simon Allardice

Creating stored procedures

The process of creating a stored procedure is quite similar to that of doing a function, or indeed of defining any procedure, function, or method in any other programming language. We're going to name it. We have to give it a name. We're going to define any parameters that it takes. We're going to actually describe what it does, which in our case will be run either a single SQL statement or even batches of T-SQL. And then return any values, describe what it is that gets sent back. So how do we do that? Well, luckily, SQL Server Management Studio has some helpers for us.

If I actually drill down into the database in which I want to create my stored procedure, I'll use AdventureWorksLT, I'll open up the Programmability section and we see that we have the Stored Procedures folder right beside the Functions folder. I'll open that guy up. I'll right-click the Stored Procedures folder and say New Stored Procedure. Again, we get a lot of boilerplate code. Just to make things clearer, I could get rid of some of the comments. I'm going to just ignore the settings here for ANSI_NULLS and QUOTED_IDENTIFIER. You just as a general rule leave those alone and then what we have is this.

We have the CREATE PROCEDURE. Give it a name. Define the parameters if it takes any. If it doesn't, you can just scrap that. Then describe what it is the stored procedure does, which by itself if it's got SELECT statements is also defining what it returns. So, creating the simplest stored procedure in the world, let's give it a name. Well, we do have to put a schema for it, which could be the usual schema of SalesLT. Or quite commonly you'll also seem under dbo.

For our case, it really doesn't matter. We just have to give it a name. I'll call this uspSimple, a user stored procedure. Very simple one. I'm going to make one that takes no parameters, so I can just delete those lines. I'm going to leave the usual message here of NOCOUNT ON. We'll talk about that in a second, and then I'm going to describe what actually happens in the stored procedure. Well, we could be doing INSERTs, we could be doing UPDATEs, we could be doing DELETEs, or we could just be doing standard SELECTs.

I could just type in a very straightforward one. SELECT * From SalesLT.Customer. Perhaps that's what I want the stored procedure to be. It's a little bit of SQL, wrapped up and given a name. So let me create it. I'll run this SQL right now. Again, this SQL is creating the stored procedure. So when I say Command(s) completed successfully, I don't expect to see any results yet.

We've now made the stored procedure. We just haven't run it. If I go over to the Object Explorer, it doesn't show up and that's because I need to refresh it. So I'll come up here to the Refresh button and then I can see, yes, I've got dbo.uspSimple. Great, looks good. I'll close these two files down. I don't need them anymore, and open up a new query window so I can actually run this. Well, we don't use the word SELECT. If we're running a stored procedure, we do this. We say EXEC for execute.

I could type in dbo.uspSimple. That's not showing up in my IntelliSense right now, because the IntelliSense just hasn't refreshed itself. But we should be able to get this to work. If I hit F5, yep, it does the same thing as would have happened if I had manually typed SELECT * FROM SalesLT.Customer. If I get annoyed about the red squiggly lines that it couldn't find that stored procedure, I can either restart SQL Server Management Studio, or with my cursor in this SQL box, I can go to the Edit menu, click IntelliSense, and just say Refresh Local Cache.

That takes a second and then the red squiggly should go away. Yes of course, this is the simplest stored procedure on the planet. You're not really going to be doing things like this all the time, although it's possible. If I want to change that, what I do is go back to the Object Explorer. I'll right-click that stored procedure and click Modify. It brings up a very similar SQL, except changing the CREATE PROCEDURE word to ALTER PROCEDURE. I'll just make my changes and run this file again.

You can also execute it by right clicking the stored procedure directly. Execute Stored Procedure. It throws up a dialog box here that gives you the opportunity to type in any parameters you might use. In our case, we don't have any. So I'll just click OK and we get the generated code to run a stored procedure here. There is a little bit more than we need, because it's setting up for return values, which we don't really care about. But that's the general process. So, what if I want to do something that's a bit more complex? Well, rather than type it out bit by bit, I'm going to use one of the few pre-created files that I have here.

I have got a similar looking file here to create a stored procedure, except this has a bit more to it. In this one, what I'm actually doing is inserting three rows into three different tables. Now, the question is why? Well, here is the deal. If I come over to my AdventureWorksLT, I have three tables called ProductDescription, ProductModel, and ProductModelProductDescription. What's this about? Well, the idea is that in this database if you're inserting a new ProductModel, you basically just insert the name.

If I took a look at this, I can see that there are things like Classic Vest, Cycling Cap, Half-Finger Gloves, Road Frame, and so on. Well, the idea is that this table is going to support multiple international languages potentially. So, I'm not just going to put in a description straight for that ProductModel. I have a separate ProductDescription table. If I look at that one, I can see that I have certain descriptions that are being stored. But as I come down, I've actually got some odd text showing up, because we're actually using multiple languages here.

We've got French. We have got some of the big five languages. Now the issue is that we could have different descriptions for the product models and potentially with descriptions like Chromoly steel, we can have different product models for the descriptions. So we've got a many to many relationship going on here. That's what this third table represents. PublicModelProductDescription. Well all this one really does is hook up a particular ProductModelID from the ProductModel table, to a ProductDescriptionID from the ProductDescription table, and then adding the Culture.

So we could have English, we could have French, we could have Thai. Okay, even if that seems a little vague right now, it's a very common situation. When you're inserting some information, all I want to do is I've just got some new ProductModel and Description information. I don't really care about how many tables have to be created and how many rows I need to do and in what order I need to do the rows. But of course, it is drastically important. If I want to make this work, I have to insert the model, then the description, and get both of the keys that have been generated before I can insert the third one.

So this is a great thing for a stored procedure. In fact, that's what this stored procedure example does. It takes three parameters. A productname that will be used to go into the ProductModel table, a productdescription that will be used to go into the ProductDescription table, and a culture, which will be used to go into the one that joins them together. In fact, culture I've set up here with an equal sign. That means this is a default value. I don't have to pass that information into the stored procedure.

The idea is I can call the stored procedure once, give it a couple of pieces of information, and end up with three rows. So breaking it down a bit further. Inside the contents of the stored procedure, I define two variables that are going to hold the keys of the two inserted rows. So in a moment, we'll insert a new ProductModel and we'll grab the productmodelid. Then we'll insert a new ProductDescription and we'll grab the generated productdescriptionid. Then we'll take both of those and insert them into ProductModelDescription.

So, step one is we insert the customer row with the parameter of productname. Then we use of this line, SELECT @productmodelid, that's our variable that we defined, = @@IDENTITY. This is a useful function that will actually grab the last inserted identity field. Step two, we do the equivalent for the ProductDescription table, inserting Description, and then we grab its IDENTITY into our productdescriptionid.

Then finally, step three. We do our third INSERT statement. Inserting into the join table, the ProductModelID, the ProductDescription, and the Culture. So let me run this SQL to create this stored procedure. Execute, Command(s) are completed successfully. All right, well, let's find out. I open up a new query. I'm going to refresh my IntelliSense. Make sure I'm using AdventureWorksLT.

Then I'll say EXEC uspCreateModelAndDescription. It's telling me here that I should be giving it a couple of parameters. The one that's highlighted in bold says "Well, give me the productname." That should be in nvarchar. I'll call it Groovy new product. I hit the comma and it highlights the next one, productdescription. Groovy new product description. If I wanted to, I could add a different culture.

If I did the comma, it would tell me that I should put in a string for the culture. But you know, I'm not going to. I'm just going to leave that blank, because there is a default value of en for English. Well, let's give this stored procedure call a try. I hit Execute. Command completed successfully. Okay, looks good. Let's prove it. The quickest way is going to be, let's take a look at the entire table, right-click, Select Top 1000 Rows. Zoom right down to the bottom and we see that we have a Groovy new product inserted with a ProductModelID of 130.

Take a look at the ProductDescription. Select that Top 1000 Rows. All the way down to the bottom and we have a Groovy new product description of 2012. So what I'm hoping to see now is that in ProductModelProductDescription. I will see 130 looking up to 2012 with a culture of en. Right down at the bottom, that's what we have. 130 key looking up to ProductDescriptionID of 2012 with the Culture of en and all of the default values generated as they should be.

Find answers to the most frequently asked questions about SQL Server 2008 Essential Training .

Expand all | Collapse all
please wait ...
Q: I'm having problems installing the free Express R2 version of SQL Server on Windows XP. I tried 64-bit and 32-bit versions. In the videos, the author installs from a DVD. Do I need to do the same?
A: While the author installs from a DVD, it's not strictly necessary. There certainly shouldn't be a problem installing the Express edition from a regular download. That's the way it's intended to be installed.

If you're using Windows XP, the only officially supported version is the 32-bit version. However, you do need to make sure that your Windows XP install is completely up-to-date and patched, with XP Service Pack 3 installed. (See http://msdn.microsoft.com/en-us/library/ms143506.aspx#Express32 for formal requirements.)

It's not unusual for the install process to take a while, and with older operating systems like XP, you'll often have to back it out and try again, as usually there's a bunch of prerequisites that need to be installed. (Like the .NET Framework 3.5 SP1, the correct version of Windows Installer, etc.)
Q: The link to the installer for the AdventureWorks sample database, as shown in the Chapter 2 movie "Installing sample databases," no longer works. Where can I find the installer?
A: Microsoft has reorganized its site. The sample files are still there, but they're a bit harder to find. To install them:

1) Visit http://msftdbprodsamples.codeplex.com/.
2) Click the link to "SQL Server 2008 R2 OLTP."
3) Click the AdventureWOkrs2008R2 Data File link and agree to the conditions to download the MDF file.
4) Move the MDF file to your SQL Server Directory, usually located at C:\Program Files\Microsfot SQL Server\MSSQL 10_50.MSSQLSERVER\MSSQL\DATA.
5) Open the SQL Sever Management Studio and connect to your instance using an account with administrative privileges.
6) Attach the sample database by right-clicking the Databases folder in the Object Explorer and choosing Attach from the pop-up menu.
7) Click the Add button in the next menu and navigate to the MDF file in the Locate Database Files window that appears. Select it and click OK.
8) Remove the reference to the log file in the "AdventureWorks2008R2" database details: pane by selecting the Log entry and clicking removing.*
9) Click OK to return to SQL Server Management Studio and complete the attachment process.

*MDF files are the "data" files for SQL Server databases. They often come along with LOG files (ldf files). This one didn't so we need to REMOVE the reference to the non-existent log file. Select the second row in the lower section (it should say File Type: Log and Message: Not Found) and click the REMOVE button.

For an illustrated version of these instructions (with screenshots), click here for a PDF version.
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

* Estimated file size

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


You have completed SQL Server 2008 Essential Training.

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

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 ?

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 preferences from 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.

Learn more, save more. Upgrade today!

Get our Annual Premium Membership at our best savings yet.

Upgrade to our Annual Premium Membership today and get even more value from your lynda.com subscription:

“In a way, I feel like you are rooting for me. Like you are really invested in my experience, and want me to get as much out of these courses as possible this is the best place to start on your journey to learning new material.”— Nadine H.

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.