Professional Documents
Culture Documents
Stored Procedures
Stored Procedures
5-3
Advanced Database Systems
Implementing Stored
Procedures
Topic & Structure of Lesson
• Improve Performance
– Stored procedures implement many tasks as a series of Transact-SQL statements. All
these Transact-SQL statements become part of a single execution plan on the server.
• Reduce Network Traffic
– Rather than sending hundreds of Transact-SQL statements over the network, users can
perform a complex operation by sending a single statement, which reduces the number
of requests that pass between client and server
CREATE
CREATE {{ PROC PROC || PROCEDURE
PROCEDURE }} [schema_name.]
[schema_name.]
procedure_name
procedure_name
[[ {{ @parameter
@parameter data_type
data_type }}
[[ VARYING
VARYING ]] [[ == default
default ]] [[ [[ OUT
OUT [[ PUT
PUT ]]
]] [[ ,...n
,...n ]]
AS
AS
{{ <sql_statement>
<sql_statement> [;]
[;] [[ ...n
...n ]}
]}
• Use EXECUTE to run stored procedure
EXECUTE
EXECUTE [schema_name.]
[schema_name.] procedure_name
procedure_name
CREATE
CREATE PROCEDURE
PROCEDURE Production.LongLeadProducts
Production.LongLeadProducts
AS
AS
SELECT
SELECT Name,
Name, ProductNumber
ProductNumber
FROM
FROM Production.Product
Production.Product
WHERE
WHERE DaysToManufacture
DaysToManufacture >=
>= 11
•GO
GOUse EXECUTE to run stored procedure
EXECUTE
EXECUTE Production.LongLeadProducts
Production.LongLeadProducts
GO
GO
• DROP PROCEDURE
DROP
DROP PROC
PROC Production.LongLeadProducts
Production.LongLeadProducts
• Input Parameters
• Output Parameters and Return Values
Input parameters
Output parameters
Return values
IF
IF (@MinimumLength
(@MinimumLength << 0)
0) ---- validate
validate
BEGIN
BEGIN
RAISERROR('Invalid
RAISERROR('Invalid lead
lead time.',
time.', 14,
14, 1)
1)
RETURN
RETURN
END
END
SELECT
SELECT Name,
Name, ProductNumber,
ProductNumber, DaysToManufacture
DaysToManufacture
FROM
FROM Production.Product
Production.Product
WHERE
WHERE DaysToManufacture
DaysToManufacture >=
>= @MinimumLength
@MinimumLength
ORDER
ORDER BY
BY DaysToManufacture
DaysToManufacture DESC,
DESC, Name
Name
EXEC
EXEC Production.LongLeadProducts
Production.LongLeadProducts @MinimumLength=4
@MinimumLength=4
CREATE
CREATE PROC
PROC HumanResources.AddDepartment
HumanResources.AddDepartment
@Name
@Name nvarchar(50),
nvarchar(50), @GroupName
@GroupName nvarchar(50),
nvarchar(50),
@DeptID smallint OUTPUT
@DeptID smallint OUTPUT
AS
AS
IF
IF ((@Name
((@Name == '')
'') OR
OR (@GroupName
(@GroupName == ''))
''))
RETURN
RETURN -1
-1
INSERT
INSERT INTO
INTO HumanResources.Department
HumanResources.Department (Name,
(Name, GroupName)
GroupName)
VALUES
VALUES (@Name,
(@Name, @GroupName)
@GroupName)
SET
SET @DeptID
@DeptID == SCOPE_IDENTITY()
SCOPE_IDENTITY()
RETURN 0
RETURN 0
DECLARE
DECLARE @dept
@dept int,
int @result
int
int, @result int
int
EXEC
EXEC @result
@result == AddDepartment
AddDepartment 'Refunds','Refunds',
'Refunds',
AddDepartment
AddDepartment '', @dept '',
'', @dept
'Refunds', @dept
@dept OUTPUT
OUTPUT
'',
OUTPUT OUTPUT
IF
IF (@result
(@result == 0)
0)
SELECT
SELECT
SELECT
SELECT @deptID
@dept
@deptID
@dept
ELSE
ELSE
SELECT
SELECT 'Error
'Error during
during insert'
insert'
Q&A
Module Code & Module Title Slide Title SLIDE 16
Next Lesson
• Implementing Triggers