module 8: implementing stored procedures. introducing stored procedures creating, modifying,...

30
Module 8: Implementing Stored Procedures

Upload: lisa-burns

Post on 12-Jan-2016

252 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Module 8:Implementing Stored

Procedures

Page 2: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Introducing Stored Procedures

Creating, Modifying, Dropping, and ExecutingStored Procedures

Using Parameters in Stored Procedures

Handling Error Messages

Working with Stored Procedures

Overview

Page 3: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

What Are Stored Procedures?

Advantages of Stored Procedures

Initial Processing of Stored Procedures

Subsequent Processing of Stored Procedures

Lesson: Introducing Stored Procedures

Page 4: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

What Are Stored Procedures?

Named Collections of Transact-SQL Statements

Encapsulate Repetitive Tasks

Accept Input Parameters and Return OutputParameter Values

Return Status Value to Indicate Success or Failure

Five Types (System, Local, Temporary, Remote,and Extended)

Page 5: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Advantages of Stored Procedures

Share Application Logic

Shield Database Schema Details

Provide Security Mechanisms

Improve Performance

Reduce Network Traffic

Reduce Vulnerability to SQL Injection Attacks

Page 6: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Initial Processing of Stored Procedures

Entries into sysobjects and syscomments tablesEntries into sysobjects and syscomments tables

Compiled plan placed inprocedure cache Compiled plan placed inprocedure cache

Creation

Execution(first time or recompile) OptimizationOptimization

ParsingParsing

CompilationCompilation

Page 7: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Unused plan is aged outUnused plan is aged out

Execution Plan Execution Context

Connection 1

80828082

Connection 2

Connection 3

2424

10031003

Subsequent Processing of Stored Procedures

Execution Plan Retrieved

SELECT *FROM dbo.memberWHERE member_no = ?

Page 8: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Lesson: Creating, Modifying, Dropping, and Executing Stored Procedures

The CREATE PROCEDURE Statement

Guidelines for Creating Stored Procedures

The ALTER PROCEDURE Statement

The DROP PROCEDURE Statement

Stored Procedure Execution

Page 9: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

The CREATE PROCEDURE Statement

Create in Current Database Using the CREATE PROCEDURE Statement

Can Nest to 32 Levels

Use sp_help to Display Information

USE NorthwindGOCREATE PROC dbo.OverdueOrdersAS SELECT * FROM dbo.Orders WHERE RequiredDate < GETDATE() AND ShippedDate IS NullGO

USE NorthwindGOCREATE PROC dbo.OverdueOrdersAS SELECT * FROM dbo.Orders WHERE RequiredDate < GETDATE() AND ShippedDate IS NullGO

Page 10: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

dbo User Should Own All Objectsdbo User Should Own All Objects

Create, Test, and TroubleshootCreate, Test, and Troubleshoot

Avoid sp_ Prefix in Stored Procedure NamesAvoid sp_ Prefix in Stored Procedure NamesUse Same Connection Settings for AllStored ProceduresUse Same Connection Settings for AllStored Procedures

Minimize Use of Temporary Stored ProceduresMinimize Use of Temporary Stored Procedures

One Stored Procedure for One TaskOne Stored Procedure for One Task

Guidelines for Creating Stored Procedures

Page 11: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

The ALTER PROCEDURE Statement

Altering Stored Procedures

Include any options in ALTER PROCEDURE Does not affect nested stored procedures

USE NorthwindGOALTER PROC dbo.OverdueOrdersASSELECT CONVERT(char(8), RequiredDate, 1) RequiredDate, CONVERT(char(8), OrderDate, 1) OrderDate, OrderID, CustomerID, EmployeeID FROM OrdersWHERE RequiredDate < GETDATE() AND ShippedDate IS NullORDER BY RequiredDateGO

USE NorthwindGOALTER PROC dbo.OverdueOrdersASSELECT CONVERT(char(8), RequiredDate, 1) RequiredDate, CONVERT(char(8), OrderDate, 1) OrderDate, OrderID, CustomerID, EmployeeID FROM OrdersWHERE RequiredDate < GETDATE() AND ShippedDate IS NullORDER BY RequiredDateGO

Page 12: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

The DROP PROCEDURE Statement

Dropping Stored Procedures

Execute the sp_depends stored procedure to determine whether objects depend on the stored procedure

Procedure information is removed from the sysobjects and syscomments system tables

Required Permission

Procedure owner Members of db_owner, db_ddladmin, and sysadmin roles

USE NorthwindGODROP PROC dbo.OverdueOrdersGO

USE NorthwindGODROP PROC dbo.OverdueOrdersGO

Page 13: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Stored Procedure Execution

Executing a Stored Procedure by Itself

Executing a Stored Procedure Within anINSERT Statement

EXEC OverdueOrdersEXEC OverdueOrders

INSERT INTO CustomersEXEC EmployeeCustomerINSERT INTO CustomersEXEC EmployeeCustomer

Page 14: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Lab A: Creating Stored Procedures

Exercise 1: Writing and Executing a Stored Procedure

Exercise 2: Locating StoredProcedure Information

Page 15: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Lesson: Using Parameters in Stored Procedures

Input Parameters

Methods of Setting Parameter Values

Return Values Using OUTPUT Parameters

Return Values Using the RETURN Statement

Stored Procedure Recompile

Page 16: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Input Parameters

Validate All Incoming ParameterValues First

Provide Appropriate Default Values and IncludeNull Checks

CREATE PROCEDURE dbo.[Year to Year Sales] @BeginDate DateTime = Null, @EndDate DateTime = Null ASIF @BeginDate IS Null SET @BeginDate = dateadd(yy,-1,GetDate())

IF @EndDate IS Null SET @EndDate = GetDate()

IF Datediff(dd,@BeginDate,@EndDate) > 365 BEGIN RAISERROR('The maximum timespan allowed for this report is one year.', 14, 1) RETURN END

SELECT O.ShippedDate,O.OrderID,OS.Subtotal, DATENAME(yy,ShippedDate) AS YearFROM ORDERS O INNER JOIN [Order Subtotals] OS ON O.OrderID = OS.OrderIDWHERE O.ShippedDate BETWEEN @BeginDate AND @EndDate

GO

CREATE PROCEDURE dbo.[Year to Year Sales] @BeginDate DateTime = Null, @EndDate DateTime = Null ASIF @BeginDate IS Null SET @BeginDate = dateadd(yy,-1,GetDate())

IF @EndDate IS Null SET @EndDate = GetDate()

IF Datediff(dd,@BeginDate,@EndDate) > 365 BEGIN RAISERROR('The maximum timespan allowed for this report is one year.', 14, 1) RETURN END

SELECT O.ShippedDate,O.OrderID,OS.Subtotal, DATENAME(yy,ShippedDate) AS YearFROM ORDERS O INNER JOIN [Order Subtotals] OS ON O.OrderID = OS.OrderIDWHERE O.ShippedDate BETWEEN @BeginDate AND @EndDate

GO

Page 17: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Methods of Setting Parameter Values

Passing Values by Parameter Name

Passing Values by Position

EXEC AddCustomer 'ALFKI2', 'Alfreds Futterkiste', 'Maria Anders', 'Sales Representative', 'Obere Str. 57', 'Berlin', NULL, '12209', 'Germany', '030-0074321'

EXEC AddCustomer 'ALFKI2', 'Alfreds Futterkiste', 'Maria Anders', 'Sales Representative', 'Obere Str. 57', 'Berlin', NULL, '12209', 'Germany', '030-0074321'

EXEC AddCustomer @CustomerID = 'ALFKI', @ContactName = 'Maria Anders', @CompanyName = 'Alfreds Futterkiste', @ContactTitle = 'Sales Representative', @Address = 'Obere Str. 57', @City = 'Berlin', @PostalCode = '12209', @Country = 'Germany', @Phone = '030-0074321'

EXEC AddCustomer @CustomerID = 'ALFKI', @ContactName = 'Maria Anders', @CompanyName = 'Alfreds Futterkiste', @ContactTitle = 'Sales Representative', @Address = 'Obere Str. 57', @City = 'Berlin', @PostalCode = '12209', @Country = 'Germany', @Phone = '030-0074321'

Page 18: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

CREATE PROCEDURE dbo.MathTutor @m1 smallint, @m2 smallint, @result int OUTPUTAS SET @result = @m1 * @m2GO

DECLARE @answer smallintEXECUTE MathTutor 5,6, @answer OUTPUTSELECT 'The result is: ', @answer

The result is: 30

CREATE PROCEDURE dbo.MathTutor @m1 smallint, @m2 smallint, @result int OUTPUTAS SET @result = @m1 * @m2GO

DECLARE @answer smallintEXECUTE MathTutor 5,6, @answer OUTPUTSELECT 'The result is: ', @answer

The result is: 30

Return Values Using OUTPUT Parameters

Results of StoredProcedure

Executing Stored

Procedure

Creating Stored

Procedure

Page 19: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

CREATE PROC dbo.NewEmployee( @LastName nvarchar(20), @FirstName nvarchar(10) ) AS INSERT Employees(LastName,FirstName) VALUES (@LastName, @FirstName)

RETURN SCOPE_IDENTITY()Go

DECLARE @NewEmployeeId intEXEC @NewEmployeeId = dbo.NewEmployee @LastName='Hankin', @FirsName='Alex'

SELECT EmployeeID, LastName, FirstName FROM EmployeesWHERE EmployeeId = @NewEmployeeId

EmployeeID LastName FirstName ----------- -------------------- ---------- 10 Hankin Alex

CREATE PROC dbo.NewEmployee( @LastName nvarchar(20), @FirstName nvarchar(10) ) AS INSERT Employees(LastName,FirstName) VALUES (@LastName, @FirstName)

RETURN SCOPE_IDENTITY()Go

DECLARE @NewEmployeeId intEXEC @NewEmployeeId = dbo.NewEmployee @LastName='Hankin', @FirsName='Alex'

SELECT EmployeeID, LastName, FirstName FROM EmployeesWHERE EmployeeId = @NewEmployeeId

EmployeeID LastName FirstName ----------- -------------------- ---------- 10 Hankin Alex

Return Values Using the RETURN Statement

Result

Executing Stored

Procedure

Creating Stored

Procedure

Page 20: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Stored Procedure Recompile

Recompile When

Stored procedure returns widely varying result sets A new index is added to an underlying table The parameter value is atypical

Recompile by Using

CREATE PROCEDURE [WITH RECOMPILE] EXECUTE [WITH RECOMPILE] sp_recompile

Page 21: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Lesson: Handling Error Messages

Error Messages

Demonstration: Handling Error Messages

Page 22: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Error Messages

RETURN Statement Exits Query orProcedure Unconditionally

sp_addmessage Creates Custom Error Messages

@@error Contains Error Number for LastExecuted Statement

RAISERROR Statement

Returns user-defined or system error message Sets system flag to record error

Page 23: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Demonstration: Handling Error Messages

Handling error messages

Page 24: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Lesson: Working with Stored Procedures

Dynamic SQL in Stored Procedures

SQL Injection

Extended Stored Procedures

Performance Diagnosis Tools

Best Practices

Page 25: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Dynamic SQL in Stored Procedures

Dynamic Search Conditions

The IN Clause

Administrative Functions

SELECT @str = 'SELECT * FROM CUSTOMERS WHERE 1=1' IF LEN(@WhereCondition) > 0 SELECT @str = @str + @WhereCondition

EXEC sp_executesql @str

SELECT @str = 'SELECT * FROM CUSTOMERS WHERE 1=1' IF LEN(@WhereCondition) > 0 SELECT @str = @str + @WhereCondition

EXEC sp_executesql @str

SELECT @SQL = 'SELECT ProductID, ProductName, UnitPrice FROM Products WHERE ProductID IN (' + (@ProductIDs) + ')'

SELECT @SQL = 'SELECT ProductID, ProductName, UnitPrice FROM Products WHERE ProductID IN (' + (@ProductIDs) + ')'

Page 26: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

SQL Injection

A Technique to Inject SQL Command as an Input

Caused by Passing User Input Directly to SQL Code

How to Avoid SQL Injection

Never trust user input Avoid dynamic SQL Execute with least privilege Store secrets securely Exceptions should divulge minimal information

Page 27: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Extended Stored Procedures

Characteristics of Extended Stored Procedures:

Programmed using open data services API Can include C and Microsoft Visual C++ features Can contain multiple functions Can be called from a client or SQL server Can be added to the master database only

EXEC master..xp_cmdshell 'dir c:\'EXEC master..xp_cmdshell 'dir c:\'

Page 28: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Performance Diagnosis Tools

Windows 2000 System Monitor

Object: SQL Server: Cache Manager Object: SQL Statistics

SQL Profiler

Can monitor events Can test each statement in a stored procedure

Page 29: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Design Each Stored Procedure to Accomplish a Single TaskDesign Each Stored Procedure to Accomplish a Single Task

Validate Data Before You Begin TransactionsValidate Data Before You Begin TransactionsUse the Same Connection Settings for AllStored ProceduresUse the Same Connection Settings for AllStored ProceduresUse WITH ENCRYPTION to Hide Text ofStored ProceduresUse WITH ENCRYPTION to Hide Text ofStored Procedures

Verify Input ParametersVerify Input Parameters

Best Practices

Page 30: Module 8: Implementing Stored Procedures. Introducing Stored Procedures Creating, Modifying, Dropping, and Executing Stored Procedures Using Parameters

Lab B: Creating Stored Procedures Using Parameters

Exercise 1: Using the Create Stored Procedure Wizard

Exercise 2: Using Error Handling inStored Procedures

Exercise 3: Customizing Error Messages

Exercise 4: Using Return Codes

If Time Permits

Executing Extended Stored Procedures Tracing Stored Procedures Using

SQL Profiler