SQL Server Stored procedures

Post on 18-Nov-2014

2.106 views 2 download

Tags:

description

 

Transcript of SQL Server Stored procedures

Stored ProceduresStored Procedures

CIS-282CIS-282

Scripts v. Stored Scripts v. Stored ProceduresProcedures

Script: Text file of SQL commandsScript: Text file of SQL commands Stored Procedure: SQL commands Stored Procedure: SQL commands

stored in database itselfstored in database itself– SPROC’s have more capabilities SPROC’s have more capabilities

than a scriptthan a script

BATCHBATCH

Batch is a logical group of SQL Batch is a logical group of SQL statementsstatements– Run-time error will halt execution Run-time error will halt execution

only of FURTHER stepsonly of FURTHER steps Can break up multiple steps using GOCan break up multiple steps using GO

– Not available in all toolsNot available in all tools– GO causes editing tool to send GO causes editing tool to send

statements to that point for statements to that point for executionexecution

– GO isn’t sent to SQL ServerGO isn’t sent to SQL Server

Format of SPROC’sFormat of SPROC’s

CREATE PROCEDURE <name> CREATE PROCEDURE <name>

<parameter list><parameter list>

ASAS

<instructions to execute><instructions to execute>

EXECUTEEXECUTE

EXEC(cute) EXEC(cute) statementstatementOROR

EXEC(cute) EXEC(cute) stored procedure namestored procedure name Statement or sproc runs in it’s Statement or sproc runs in it’s

own scopeown scope– Can’t ‘share’ variables directlyCan’t ‘share’ variables directly– User’s security rules applyUser’s security rules apply– Can’t be used in User Defined Can’t be used in User Defined

Function (UDF)Function (UDF)

Uses of Stored Uses of Stored ProceduresProcedures

For returning data (select)For returning data (select) For editing dataFor editing data For calculationsFor calculations

ParametersParameters

Method for sending data into and from Method for sending data into and from a stored procedurea stored procedure– INPUT parameters are values sent inINPUT parameters are values sent in– OUTPUT parameters are values OUTPUT parameters are values

returnedreturned Must have a holding space Must have a holding space (variable) for the returned data(variable) for the returned data

Defined before start of procedure (AS)Defined before start of procedure (AS)

Declaring ParametersDeclaring Parameters

Include name and datatypeInclude name and datatype Default value is optionalDefault value is optional

– Without a default value, Without a default value, parameter is requiredparameter is required

Direction is optional (input is Direction is optional (input is default)default)– An output parameter must have An output parameter must have

direction specifieddirection specified

Sample Input ParameterSample Input Parameter

CREATE PROC upFindStudentCREATE PROC upFindStudent

@SID char(9)@SID char(9)

ASAS

SELECT * SELECT *

FROM Students_TFROM Students_T

Where SchoolID=@SIDWhere SchoolID=@SID

Sample Output Sample Output ParameterParameter

CREATE PROC upFindStudentIDCREATE PROC upFindStudentID

@First varchar(25),@First varchar(25),

@Last varchar(35),@Last varchar(35),

@SID char(9) OUTPUT@SID char(9) OUTPUT

ASAS

SELECT @SID=SchoolIDSELECT @SID=SchoolID

FROM Students_TFROM Students_T

Where @First=Firstname and Where @First=Firstname and

@Last=Lastname@Last=Lastname

Return ValuesReturn Values

Result of stored procedure Result of stored procedure indicates success or failureindicates success or failure

Non-zero value indicates a problemNon-zero value indicates a problem Must be an integerMust be an integer Different from an output parameterDifferent from an output parameter

– Output parameter is about Output parameter is about datadata RETURN <value>RETURN <value>

– Causes immediate exit Causes immediate exit

VariablesVariables

Create using DECLARECreate using DECLARE Need to start with ‘@’Need to start with ‘@’ Can use SQL data types or custom Can use SQL data types or custom

data typesdata types

DECLARE @StudentName DECLARE @StudentName varchar(50)varchar(50)

Variable AssignmentVariable Assignment

SET is usually used similar to SET is usually used similar to procedural languageprocedural language

SET @Var=valueSET @Var=value

SELECT is usually used when SELECT is usually used when getting a value from a querygetting a value from a query

SELECT SELECT @Var=Sum(PossiblePoints) @Var=Sum(PossiblePoints) FROM AssignmentsFROM Assignments

Decision MakingDecision Making

SQL supports two structures for SQL supports two structures for branching:branching:– IFIF– CASECASE

Both structures are similar to Both structures are similar to other languages (IF … THEN, other languages (IF … THEN, SELECT CASE) SELECT CASE)

Both structures tend to have Both structures tend to have specific places where usedspecific places where used

IF BlocksIF Blocks

IF … ELSEIF … ELSE– No end ifNo end if– Need to use Begin/End if have more Need to use Begin/End if have more

than one instruction to executethan one instruction to execute

IF StartDate < EndDateIF StartDate < EndDate

BeginBegin

……

EndEnd

ELSEELSE

Simple Case StatementSimple Case Statement

CASECASE– Similar to SELECT CASESimilar to SELECT CASE– Compares one value to Compares one value to

different casesdifferent casesCASE CategoryCASE Category

WHEN ‘pop_comp’ THEN ‘Popular Computing’WHEN ‘pop_comp’ THEN ‘Popular Computing’

WHEN ‘mod_cook’ THEN ‘Modern Cooking’WHEN ‘mod_cook’ THEN ‘Modern Cooking’

ENDEND

Searched CASESearched CASE

No test expressionNo test expression Each WHEN has a boolean testEach WHEN has a boolean test

CASECASE

WHEN Points >= 90 THEN ‘A’WHEN Points >= 90 THEN ‘A’

WHEN Points < 90 AND Extra > 0WHEN Points < 90 AND Extra > 0

THEN ‘A’THEN ‘A’

ENDEND

Looping (While)Looping (While)

Typically used with a CURSORTypically used with a CURSOR– Cursor data type allows a table Cursor data type allows a table

to be stored in memory and to be stored in memory and each row/field to be accessedeach row/field to be accessed

BREAK allows early exit from loopBREAK allows early exit from loop CONTINUE forces control to start CONTINUE forces control to start

of loopof loop Working with sets is preferred Working with sets is preferred

over loops (SQL is about sets)over loops (SQL is about sets)

Finding Identity ValuesFinding Identity Values

When need to find the value used When need to find the value used to identify the last row addedto identify the last row added

@@Identity@@Identity Scope_IdentityScope_Identity Ident_CurrentIdent_Current

@@Identity – @@Identity – System VariableSystem Variable

Returns the last identity value used Returns the last identity value used as a result of INSERT or SELECT INTOas a result of INSERT or SELECT INTO– Not limited to current scope; may Not limited to current scope; may

not get correct valuenot get correct value Returns Null if operation failed or a Returns Null if operation failed or a

value wasn’t generatedvalue wasn’t generated Returns last number created if Returns last number created if

multiple inserts occur (i.e. SELECT multiple inserts occur (i.e. SELECT INTO)INTO)

Scope_Identity()Scope_Identity()

Return the last identity values generated in any table in the current session.

Returns values inserted only within the current scope– Not affected by other

operations.

Ident_Current()Ident_Current()

Not limited by scope and session; Limited to a specified table (table

name specified as an argument value).

@@Rowcount –@@Rowcount – System Variables System Variables

Number of rows returned or Number of rows returned or affected by the last statementaffected by the last statement

0 (zero) is often used as a logical 0 (zero) is often used as a logical testtest– If no records found for where If no records found for where

clause, notify system or processclause, notify system or process

ErrorsErrors

Errors can occur because of SQL Errors can occur because of SQL statementstatement– Invalid syntax, or data typeInvalid syntax, or data type

Errors can also reflect business Errors can also reflect business rulesrules– Data doesn’t match Data doesn’t match

requirementsrequirements

@@Error – @@Error – System VariableSystem Variable

Determined after each SQL Determined after each SQL statement;statement;

0 means statement was successful0 means statement was successful Number other than zero is Number other than zero is

typically a specific errortypically a specific error Can store value in variable and Can store value in variable and

testtest

Try/CatchTry/Catch

Similar to .Net languagesSimilar to .Net languages Need to include BEGIN/ENDNeed to include BEGIN/END

BEGIN TRYBEGIN TRY

<code><code>

END TRYEND TRY

BEGIN CATCHBEGIN CATCH

<error handling code><error handling code>

END CATCHEND CATCH

Raise ErrorRaise Error

Used to send information to Used to send information to calling programcalling program

Syntax:Syntax:RaisError (Message string OR RaisError (Message string OR

Message ID, Severity, State)Message ID, Severity, State)– Severity – <14 information; 15-19 Severity – <14 information; 15-19

warning or user can correct; 20+ fatalwarning or user can correct; 20+ fatal– State – way to differentiate problems State – way to differentiate problems

if needed; typically use 1if needed; typically use 1 RAISERROR (50001,16,1)RAISERROR (50001,16,1)

Error Message Error Message

Message ID or StringMessage ID or String– Use ID if have custom or TSQL Use ID if have custom or TSQL

error to useerror to use– Use String for ‘on the fly’ Use String for ‘on the fly’

messagemessage Stored Error Messages are server-Stored Error Messages are server-

specificspecific– Can add messageCan add message– Number greater than 50000Number greater than 50000

Custom Error MessagesCustom Error Messages

Messages can include a parameter Messages can include a parameter with % to allow addition to with % to allow addition to messagemessage– ‘‘D’ – signed integerD’ – signed integer– ‘‘O’ – unsigned octalO’ – unsigned octal– ‘‘P’ – pointerP’ – pointer– ‘‘S’ – stringS’ – string– ‘‘U’ – unsigned integerU’ – unsigned integer– ‘‘X’ or ‘x’ – unsigned hexadecimalX’ or ‘x’ – unsigned hexadecimal

Severity & StateSeverity & State

1 – 18: Informational1 – 18: Informational– 11 – 16 typically raise error at 11 – 16 typically raise error at

clientclient 19 – 25: Severe error19 – 25: Severe error

– 20+ is fatal error and connection 20+ is fatal error and connection will terminatewill terminate

State is ‘ad hoc’ and can help if same State is ‘ad hoc’ and can help if same error happens in multiple placeserror happens in multiple places– Range of 1 – 127Range of 1 – 127

Sample Error MessageSample Error Message

RaisError(“Operation cannot be RaisError(“Operation cannot be completed because field %s completed because field %s cannot be null”,1,1,”fieldname”)cannot be null”,1,1,”fieldname”)

TransactionsTransactions

Provides method for canceling an Provides method for canceling an operationoperation

Can restore rows, columns to Can restore rows, columns to original state in event of error or original state in event of error or business logic failurebusiness logic failure

Use when changes will either be Use when changes will either be committed or discarded in entiretycommitted or discarded in entirety

ACIDACID

AtomicityAtomicity: All of the changes will be : All of the changes will be accepted or none of the changes will be accepted or none of the changes will be acceptedaccepted

ConsistencyConsistency: Data is either in its original : Data is either in its original or changed stateor changed state

IsolationIsolation: If multiple transactions occur, : If multiple transactions occur, data is never available in an intermediate data is never available in an intermediate statestate

DurabilityDurability: Once finished, all changes are : Once finished, all changes are complete and changes can only be done by complete and changes can only be done by another transaction/unit of workanother transaction/unit of work

Using A TransactionUsing A Transaction

Begin Tran: Identifies the startBegin Tran: Identifies the start Commit Tran: Write changesCommit Tran: Write changes Rollback Tran: Cancel changesRollback Tran: Cancel changes

Issue A Commit Or Rollback Or Issue A Commit Or Rollback Or Connection Stays Open Until Connection Stays Open Until TerminatedTerminated

Locking & ConcurrencyLocking & Concurrency

Locking allows a transaction to Locking allows a transaction to ensure that it can rollbackensure that it can rollback

Prevents other operations from Prevents other operations from changing that datachanging that data

Concurrency refers to multiple Concurrency refers to multiple actions running against database actions running against database at the same timeat the same time– What happens if you want to What happens if you want to

change data I’m working with?change data I’m working with?

Sample Locking LevelsSample Locking Levels

DatabaseDatabase TableTable Extent (memory)Extent (memory) Page (subset of Page (subset of

extent)extent) KeyKey RowRow

CursorsCursors

Processing based on each rowProcessing based on each row– not set operationsnot set operations

Declare @Cursor CursorDeclare @Cursor Cursor Set @Cursor = Cursor For (select Set @Cursor = Cursor For (select

statement)statement) Open @CursorOpen @Cursor Fetch Next From @Cursor into Fetch Next From @Cursor into

(variables matching field list in (variables matching field list in select)select)

Using a CursorUsing a Cursor

Declare @Students CursorDeclare @Students CursorSet @Cursor = Cursor For (Select FirstName, Set @Cursor = Cursor For (Select FirstName,

LastName From Students)LastName From Students)Open @StudentsOpen @StudentsWhile @@Fetch_Status = 0While @@Fetch_Status = 0

BeginBeginFetch Next From @Students Into @First, Fetch Next From @Students Into @First, @Last@LastPrint @First + ‘ ‘+ @Last Print @First + ‘ ‘+ @Last EndEnd

Close @StudentsClose @StudentsDeallocate @StudentsDeallocate @Students

@@Fetch_Status@@Fetch_Status

0 success;0 success; -1 failed (read record outside -1 failed (read record outside

recordset);recordset); -2 missing record (eg. someone -2 missing record (eg. someone

else deleted)else deleted)