Stored Procedures
Stored Procedures
PROCEDURES
Execution Environment
• Code can be executed at two locations
• Client
• Server
• Triggers
• User-defined procedures that execute automatically when data in a given table is
modified
• System procedures
• Built in procedures that read or modify one or more system tables
Guidelines for Creating Stored
Procedures
Rules for designing stored procedures:
✔ Naming conventions
✔ Execution Context
✔ Using @@nestlevel
Syntax for Creating Stored
Procedures
CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS { <sql_statement> [;][ ...n ] | <method_specifier> }
[;]
<procedure_option> ::=
[ ENCRYPTION ]
[ RECOMPILE ]
[ EXECUTE_AS_Clause ]
<sql_statement> ::=
{ [ BEGIN ] statements [ END ] }
<method_specifier> ::=
EXTERNAL NAME assembly_name.class_name.method_name
Syntax for Altering Stored
Procedures
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ [ OUT [ PUT ] ] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS
{ <sql_statement> [ ...n ] | <method_specifier> }
<procedure_option> ::=
[ ENCRYPTION ]
[ RECOMPILE ]
[ EXECUTE_AS_Clause ]
<sql_statement> ::=
{ [ BEGIN ] statements [ END ] }
<method_specifier> ::=
EXTERNAL NAME
assembly_name.class_name.method_name
Syntax for Dropping Stored
Procedures
•DROP { PROC | PROCEDURE } { [ schema_name. ] procedure } [ ,...n ]
Removes one or more stored procedures or procedure groups from the current
database.
How Are Stored Procedures
Created?
Creating a Stored Procedure
CREATE PROCEDURE HumanResources.usp_GetEmployeesName
@NamePrefix char(1)
AS
BEGIN
SELECT BusinessEntityID, FirstName, LastName, EmailAddress
FROM HumanResources.vEmployee
WHERE FirstName LIKE @NamePrefix + '%'
ORDER BY FirstName
END
✔
Part of a single transaction along with the
initiating statement
Two categories:
• AFTER triggers execute after an INSERT, UPDATE,
or DELETE statement
• INSTEAD OF triggers execute instead of an INSERT,
UPDATE, or DELETE statement
Creating Triggers
• Simplified syntax:
create trigger trigger_name
on table_name
for {insert | update | delete} [, {insert | update | delete} ...]
as
sql_statements
How an INSERT Trigger Works
1 INSERT statement executed