IMS 4212: Application Architecture and Intro to Stored Procedures
1Dr. Lawrence West, Management Dept., University of Central [email protected]
Stored Procedures in SQL Server
• Architecture Overview
• Designing and Creating SP
• SP Variables and Return Values
• Odds ‘n’ Ends
IMS 4212: Application Architecture and Intro to Stored Procedures
2Dr. Lawrence West, Management Dept., University of Central [email protected]
Architecture Elements
• A full-fledged systems production and operation environment will consist of a multitude of elements
– Databases
• Tables, relationships, indices
• Stored procedures
– Database connectivity
• System connectivity (DSN, ADO.Net)
• Application connectivity
– Applications
IMS 4212: Application Architecture and Intro to Stored Procedures
3Dr. Lawrence West, Management Dept., University of Central [email protected]
Architecture Elements (cont.)
• Next few weeks will be dealing with these elements
• It will be important that you understand individual topics in the context of this framework
DATABASE COMPONENTS
TABLES &RELATIONSHIPS
STOREDPROCEDURES
APPLICATIONSDATABASECONNECTIVITY
(ADO.Net)
IMS 4212: Application Architecture and Intro to Stored Procedures
4Dr. Lawrence West, Management Dept., University of Central [email protected]
Stored Procedures
• Stored Procedures (SP) are procedural instructions stored within the database
• SP can be called accessed by other SP or by external applications
• Simplest SP execute a single SQL statement
• SP can be incredibly complex
• SP can accept variable values
• SP can return results
– Individual discrete values
– Entire recordsets (query results)
IMS 4212: Application Architecture and Intro to Stored Procedures
5Dr. Lawrence West, Management Dept., University of Central [email protected]
Script to Create a Simple Stored Procedure
if exists (select name from sysobjects where name = 'up_Organization_Update' and type = 'P')drop procedure up_Organization_UpdateGO
CREATE PROCEDURE up_Organization_Update @OrgID bigint,@OrgName varchar(50),@AcctName varchar(50),@WireAcct varchar(25)AS UPDATE Organization SET OrgName = @OrgName, AcctName = @AcctName, WireAcct = @WireAcct WHERE OrgID = @OrgIDGO
IMS 4212: Application Architecture and Intro to Stored Procedures
6Dr. Lawrence West, Management Dept., University of Central [email protected]
SP Advantages
• Centralized
– Any application can access the SP because it is stored with the database
– Maintenance takes place in one location
• Fast!!
– DB compiles SP and develops an ‘execution plan’ the first time the SP is run
– Subsequent runs are as fast as they can be
• Secure
– SP logic is hidden from anyone who does not have permissions to view the object
Really Important
IMS 4212: Application Architecture and Intro to Stored Procedures
7Dr. Lawrence West, Management Dept., University of Central [email protected]
Designing SP
• Most tables will need INSERT INTO and UPDATE SP
• Identify other SP needed for your application’s business logic
– DELETE
– Specialized SELECT queries
• Retrieve an individual record by some criteria
• Retrieve a collection of records by a criteria
• Retrieve all records in a table
• Perform multi-table join queries
• Perform aggregate queries
IMS 4212: Application Architecture and Intro to Stored Procedures
8Dr. Lawrence West, Management Dept., University of Central [email protected]
Designing SP (cont.)
• Naming Stored Procedures
– All begin with “up” for User Procedure
– Rest of name should give purpose of query
– Single table procedures should be “up_tablename_purpose”
– Examples
• up_customers_insert
• up_customers_selectbyCustID
• up_monthlysalesdetail_bymonth
SP appear alphabetically
in Enterprise M
anager
IMS 4212: Application Architecture and Intro to Stored Procedures
9Dr. Lawrence West, Management Dept., University of Central [email protected]
Creating SP
• SP are created in Enterprise Manager
• Executing the SP creation command in the Query Analyzer creates the SP as an object in the DB
• SP can be modified in the Enterprise Manager or modified in the Query Analyzer and recreated
• Be sure to save your SP files from Query Analyzer so they can be modified and rerun if necessary
Demonstration
IMS 4212: Application Architecture and Intro to Stored Procedures
10Dr. Lawrence West, Management Dept., University of Central [email protected]
Creating SP (cont.)
• CREATE PROCEDURE procedure_name[parameter list]AS
– Creates procedure
– Parameter names must start with ‘@’
– Parameters are typed with SQL Server data types
– Parameters should match field typesCREATE PROCEDURE up_Organization_Update @OrgID bigint,@OrgName varchar(50),@AcctName varchar(50),@WireAcct varchar(25)AS
IMS 4212: Application Architecture and Intro to Stored Procedures
11Dr. Lawrence West, Management Dept., University of Central [email protected]
Creating SP (cont.)
• Body of procedureexecutes logic
• Parameters are usedlike variables in theSQL statements
• Note that there are no delimiters (single quotes for text or #-signs for dates) around these values
UPDATE Organization SET OrgName = @OrgName, AcctName = @AcctName, WireAcct = @WireAcct WHERE OrgID = @OrgIDGO
IMS 4212: Application Architecture and Intro to Stored Procedures
12Dr. Lawrence West, Management Dept., University of Central [email protected]
SP Variables and Return Values
• When SP create a recordset with an SQL SELECT statement that recordset is available to the calling procedure or application (more later)
• SP may return a value with the RETURN(@varname) syntax
• If @varname is not an input parameter it must be created with the DECLARE statement DECLARE @varname datatype
• Use SET to assign a value to a variable
• @@ERROR and @@IDENTITY are common intrinsic values that are returned
IMS 4212: Application Architecture and Intro to Stored Procedures
13Dr. Lawrence West, Management Dept., University of Central [email protected]
SP Variables & Return Values (cont.)
CREATE PROCEDURE up_Organization_Insert @OrgName varchar(50),@AcctName varchar(50),@WireAcct varchar(25)ASDECLARE @OrgID bigint
--Perform the insertINSERT INTO Organization ( OrgName, AcctName, WireAcct) VALUES (@OrgName, @AcctName, @WireAcct)
--Load the PK into the return parameterSET @OrgID = @@IdentityRETURN (@OrgID)
GO
Parameters
Declare internal variable
@@Identity gives identityattribute value of most recently added record
Returning the variable value
IMS 4212: Application Architecture and Intro to Stored Procedures
14Dr. Lawrence West, Management Dept., University of Central [email protected]
SP Variables & Return Values (cont.)
• Notes:
– RETURN can only return a variable
• RETURN(@@Identity) won’t work
– Pay careful attention to data types
• When a parameter variable or internal variable interacts directly with a table field the field and the variable must be of the same data type
• Ensure that varchar variables and fields are the same length
– We will see how to read returned recordset values next time
IMS 4212: Application Architecture and Intro to Stored Procedures
15Dr. Lawrence West, Management Dept., University of Central [email protected]
Testing SP
• Test SP in Enterprise Mgr.with the Exec statement
• Exec SP_Name [parameterlist]
• [Parameter List] is a listof values, one for eachparameter in the SP, in the specified order. Must have delimiters if applicable
• Enter in E.M.:– EXEC up_Organization_Insert ‘Test Org’, ‘Test
Acct’, ‘12345’– SELECT * FROM Organization
CREATE PROCEDURE up_Organization_Insert @OrgName varchar(50),@AcctName varchar(50),@WireAcct varchar(25)ASDECLARE @OrgID bigint
--Perform the insertINSERT INTO Organization ( OrgName, AcctName, WireAcct) VALUES (@OrgName, @AcctName, @WireAcct)
--Load the PK into the return parameterSET @OrgID = @@IdentityRETURN (@OrgID)
GO
IMS 4212: Application Architecture and Intro to Stored Procedures
16Dr. Lawrence West, Management Dept., University of Central [email protected]
Testing SP (cont.)
• SP may also be tested with named parameters from an Enterprise Manager query window
EXEC [dbo].[up_Order_Details_Add_Test]@OrderID = 11096,@ProductID = 2,@UnitPrice = 14,@Quantity = 1,@Discount = 0
IMS 4212: Application Architecture and Intro to Stored Procedures
17Dr. Lawrence West, Management Dept., University of Central [email protected]
Default Parameter Values
CREATE PROCEDURE [up_Order_Details_Add_Test]
@OrderID int,
@ProductID int,
@UnitPrice money,
@Quantity smallint = 1,
@Discount real = 0
AS
--Decrement QOH in Products table
UPDATE Products
SET UnitsInStock = UnitsInStock - @Quantity
WHERE ProductID = @ProductID
--Insert into [Order Details]
INSERT INTO [Order Details]
VALUES( @OrderID, @ProductID, @UnitPrice,
@Quantity, @Discount)
• Execution need not provide values for all parameters (but may)
EXEC [dbo].[up_Order_Details_Add_Test]@OrderID = 11096,@ProductID = 4,@UnitPrice = 14
IMS 4212: Application Architecture and Intro to Stored Procedures
18Dr. Lawrence West, Management Dept., University of Central [email protected]
Output Parameters
• Use Output param to return values
ALTER PROCEDURE [up_Order_Details_Add_Test]
@OrderID int,@ProductID int,@UnitPrice money,@Quantity smallint = 1,@Discount real = 0,@QuantityOnHand smallint OutputAS --Decrement quantity on hand in
Products tableUPDATE ProductsSET UnitsInStock = UnitsInStock -
@QuantityWHERE ProductID = @ProductID
-- Return QOH After UpdateSET @QuantityOnHand = ( SELECT UnitsInStock FROM Products WHERE ProductID = @ProductID)
• Illustrating calling the procedure to the left from EM
• DECLARE @Qty smallint
EXEC [dbo].[up_Order_Details_Add_Test]@OrderID = 11096,@ProductID = 39,@UnitPrice = 14,@QuantityOnHand = @qty OUTPUT
SELECT @qty
• May also declare parameters in .VB code to be of ParameterDirection.Output
IMS 4212: Application Architecture and Intro to Stored Procedures
19Dr. Lawrence West, Management Dept., University of Central [email protected]
Flow Control with If [Else]
ALTER PROCEDURE [up_Order_Details_Add_Test]
@OrderID int,@ProductID int,@UnitPrice money,@Quantity smallint = 1,@Discount real = 0,@QuantityOnHand smallint OutputAS
Declare @NewRec bit --Decrement quantity on hand in
Products tableUPDATE ProductsSET UnitsInStock = UnitsInStock -
@QuantityWHERE ProductID = @ProductID
-- Return QOH After UpdateSET @QuantityOnHand = ( SELECT UnitsInStock FROM Products WHERE ProductID = @ProductID)
set @NewRec = (SELECT Count(*) FROM [Order Details] WHERE OrderID = @OrderID AND ProductID = @ProductID)IF @NewRec = 0 BEGIN --Perform the insert into [Order
Details] table INSERT INTO [Order Details] VALUES( @OrderID, @ProductID,
@UnitPrice, @Quantity, @Discount) ENDELSE BEGIN -- Update existing record UPDATE [Order Details] SET Quantity = Quantity + @Quantity WHERE OrderID = @OrderID AND ProductID = @ProductID END
IMS 4212: Application Architecture and Intro to Stored Procedures
20Dr. Lawrence West, Management Dept., University of Central [email protected]
User Defined Functions
CREATE FUNCTION [dbo].[udf_Orders_LastCustOrderDate]
(@CustomerID nchar(5)
) RETURNS datetimeASBEGIN
-- Declare the return datetime variableDECLARE @LastOrderDate datetime
-- Select the last date into the return variableSET @LastOrderDate = (
SELECT Max(OrderDate) FROM Orders WHERE CustomerID = @CustomerID)
-- Return the result of the functionRETURN @LastOrderDate
END
• Using the Function in a SP– Must use the dbo.function_name format– May have multiple parameters just like
a VB function
SELECT CustomerID, CompanyName,
dbo.udf_Orders_LastCustOrderDate(CustomerID) AS [Last Order]
FROM CustomersWHERE
dbo.udf_Orders_LastCustOrderDate(CustomerID) <
'1/1/2007'
IMS 4212: Application Architecture and Intro to Stored Procedures
21Dr. Lawrence West, Management Dept., University of Central [email protected]
More on SP
• SP can actually be incredibly rich procedural code using T-SQL (transact SQL)
– Conditional execution
– Looping execution
– Branching execution
– Calling other SP (reusable logic modules)
• Oracle and other DB have similar capabilities
• Most common SP execute discrete DB activities based around SELECT, INSERT INTO, UPDATE, and DELETE statements
IMS 4212: Application Architecture and Intro to Stored Procedures
22Dr. Lawrence West, Management Dept., University of Central [email protected]
More on SP (cont.)
• It is absolutely imperative that you practice these steps
– We are now moving into programming technologies
– You must be comfortable with each step
– You will be combining many elements in your applications (see figure on slide #3)
• Next:
– Using VB to connect to SQL Server using SP
– Working with recordsets created by a SP SELECT statement