Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 42

17 (Cursors)

SELECT

SQL Server

(Cursors)

(Cursors)

SQL Server 3

Transact SQL Cursors

DECLARE CURSOR
Transact
SQL, Stored Procedure

2 3

Application programming interface (API) server


Cursors SQL Server API Cursor OLE

DB (ADO Visual Basic), ODBC DB

Library
API OLE DB, ODBC DB Library

Client Cursors

UPDATE

DELETE, UPDATE

WHERE CURRENT OF

Transact SQL Cursors

1. DECLARE


SELECT

DECLARE cust_cursor CURSOR FOR



cust_cursor

SELECT * FROM TblCustomers ORDER by

CustomerName - TblCostomers
2. DECLARE


OPEN
OPEN cust_cursor

3. OPEN
FETCH

DECLARE
FETCH

@@FETCH_STATUS

FETCH

WHILE (@@FETCH_STATUS = 0) -
0 FETCH

FETCH NEXT FROM cust_cursor

4.

UPDATE <table_name> SET <column_name> =

<value> WHERE CURRENT OF <cursor_name>

DELETE <table_name> WHERE CURRENT OF

<cursor_name>


cursor_name

5. CLOSE



OPEN
DEALLOCATE

( DEALLOCATE
DECLARE)

TblCustomers SELECT * FROM


TblCustomers

DECLARE

SQL Server

ANSI 92 SQL Server

Transact SQL
Extended Syntax

ANSI 92

1. ANSI 92

DECLARE cursor_nam [INSENSITIVE]

ANSI 92

cursor_nam
e

IVE

INSENSIT select_statement

SCROLL

FETCH NEXT,
PRIOR, FIRST, LAST, RELATIVE,

ABSOLUTE



NEXT

Select_stat

ement

SELECT COMPUTE,
COMPUTE BY FOR BROWSE INTO

UPDATE

2. Transact SQL
Extended Syntax

DECLARE cursor_name CURSOR


[LOCAL | GLOBAL]

[FORWARD_ONLY | SCROLL]
[STATIC | KEYSET | DYNAMIC | FAST_FORWARD]
--

[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]


[TYPE_WARNING]

FOR select_statement [FOR {READ ONLY | UPDATE


[OF column_list]}]


Transact SQL Extended

STATIC

tempdb

ANSI

INSENSITIVE Transact SQL


STATIC
- ANSI
DECLARE my_cursor1 INSENSITIVE CURSOR
FOR SELECT ProductID, ProductName FROM
TblProducts

WHERE CategoryID = 2
- Transact - SQL

DECLARE my_cursor1 CURSOR STATIC


FOR SELECT ProductID, ProductName FROm
TbIProducts

WHERE CategoryID = 2

ANSI INSENSITIVE

(Scrollable)
SCROLL

Transact SQL

KEYSET

(Unique Identifier) keyset


keyset

tempdb STATIC
tempdb

OPEN
keyset

(Insert)
keyset

(Update)

(Delete)

@@FETCH_STATUS 2

KEYSET

DECLARD my_cursor1 CURSOR KEYSET


FOR SELECT ProductID, ProductName FROM

TbIProducts

WHERE CategoryID = 2
keyset tempdb

FETCH ABSOLUTE 10 FROM my_cursor1



keyset

KEYSET

Unique Index ( Unique


Index )

KEYSET

Unique Index KEYSET

STATIC

TYPE_WARNING
KEYSET TbIProducts
Unique Index SQL Server STATIC

DECLARE my_cursor1 CURSOR KEYSET


TYPE_WARNING

FOR SELECT ProductID, ProductName FROM

TbIProducts

WHERE CategoryID=2
SQL Server
7

Clustered Index Unique


Clustered
Index
DYNAMIC

KEYSET OPEN



DYNAMIC

FETCH
ABSOLUTE
FETCH RELATIVE

DYNAMIC

DECLARE my_cursor1 CURSOR DYNAMIC


FOR SELECT ProductID, ProductName FROM

TbIProducts

WHERE CategoryID=2

Fast Forward Only

FORWARD_ONLY

READ_ONLY

DECLARE my_cursor1 CURSOR FAST_FORWARD


FOR SELECT ProductID, ProductName FROM

TbIProducts

WHERE CategoryID=2
Not
e

Transact SQL

SELECT OPEN
2


STATIC

SELECT OPEN
(Distributed Query)


KEYSET

SELECT OPEN

text, ntext
image
DYNAMIC

SELECT

text, ntext image TOP
KEYSET

SQL Server

Stored Procedure

Global Local Cursors


Transact SQL Cursors

Global

Stored Procedure

Stored Procedure

Stored Procedure
Stored Procedure

Local

, Stored Procedure

Local
, Store Procedure Trigger

Local
DECLARE my_cursor1 CURSOR LOCAL STATIC
FOR SELECT ProductID, ProductName FROM

TbIProducts

WHERE CategoryID=2

SELECT Stored Procedure

SELECT
COMPUTE, COMPUTER BY FOR
BROWSE INTO


Transact SQL

2 SCROLL FORWARD_ONLY
STATIC, KEYSET
DYNAMIC SCROLL

FORWARD_ONLY (FORWARD_ONLY
FETCH NEXT SCROLL )

READ_ONLY

UPDATE DELETE
FAST_FORWARD
KEYSET
KEYSET

( STATIC
FAST_FORWARD)

SCROLL_LOCKS




FAST_FORWARD

OPTIMISTIC


Timestamp
Checksurn

FAST_FORWARD
DYNAMIC KEYSET

OPEN

DECLARE

OPEN

OPEN

INSENSITIVE

STATIC OPEN

KEYSET OPEN

@@CURSOR_ROWS
OPEN

@@CURSOR_ROWS

-m

STATIC KEYSET

-1

(m
DYNAMIC

STATIC KEYSET

(n
)

OPEN


OPEN

SQL Server
(Asynchronous)

OPEN

sp_configure Cursor Threshold


EXEC sp_configure show advanced option, 1/*


*/
RECONFIGURE

/*

EXEC sp_configure

/*

*/

*/

Cursor Threshold
1

OPEN
(synchronous)

Sp_configure cursor threshold, -1


OPEN

Fetch

Sp_configure cursor thresthole, 0


FETCH LAST



KEYSET STATIC

FETCH

FETCH

FETCH [row_selector FROM] cursor_name [INTO

row_selector NEXT, PRIO, FIRST,

ABSOLUTE n RELATIVE n

NEXT row_selector
FETCH NEXT

FETCH NEXT FROM Cur_Products

PRIOR

FETCH PRIOR FROM Cur_Products

FIRST

FETCH FIRST FROM Cur_Products

LAST

FETCHLAST FROM Cur_Products

ABSOLUTE n n
n

FETCH ABSOLUTE 3 FROM Cur_Products


3
*/

/*

FETCH ABSOLUTE -1 FROM Cur_Products

1 */

/*

RELATIVE n n


n

FETCH RELATIVE 5 FROM Cur_Products /*


5 */
FETCH RELATIVE -3 FROM Cur_Products

/*

3 */
FETCH NEXT, PRIOR RELATIVE

n RELATIVE

ABSOLUTE
bitint, integer, smallint tinyint

FETCH NEXT
FETCH FIRST

FETCH PRIOR
FETCH RELATIVE FETCH

ABSOLUTE n n
0

@@FETCH_STATUS
1 @@FETCH_STATUS

0
-1

-2

FETCH
FETCH



DYNAMIC

UPDATE

UPDATE


KEYSET DYNAMIC

UPDAT table_name SET assignmet_list WHERE

FETCH ABSOLUTE 3
UnitPrice 10

DELETE
DELETE

KEYSET DYNAMIC

DELETE FROM table_name WHERE CURRENT OF

cursor_name

DELETE FROM TbIProducts WHERE CURRENT OF


Cur_Products


Cur_Products TbIProducts
Not
e

UPDATE

DELETE

( INSERT
)

CLOSE

CLOSE

OPEN

CLOSE




OPEN
DECLARE


CLOSE Cur_Products
Not
e

ANSI

COMMIT TRANSACTION
SQL Server


ANSI SET

SET

DEALLOCATE
DEALLOCATE

DEALLOCATE cursor_name

DEALLOCAT Cur_Products

OPEN



DECLARE

DEALLOCATE

DYNAMIC

FORWARD_ONLY FETCH

FETCH NEXT

SCROLL

SCROLL m FETCH

3 KEYSET

KEYSET

FETCH
OPEN




DYNAMIC

4 DYNAMIC
DYNAMIC

FETCH

OPEN

(Cursor variables)

SQL Server

SET

SELECT

SET @cursor_var = declared_cursor --

cursor_var
declard_cursor

--

Stored procedure


Stored Procedure

DECLAR declard_cursor CURSOr


declared_cursor

--

FOR SELECT au_lname FROM authors


DECLARE @cursor_var cursor

cursor_var

--

SET @cursor_var = declared_cursor --

cursor_var

--

declared_cursor



OPEN @cursor_var

--

OPEN declared_cursor

FETCH

CLOSE
FETCH

DEALLOCATE


DEALLOCATE declared_cursor

declared_cursor
@var_a_cursor
@var_b_cursor

CURSOR_STATUS

CURSOR_STATUS
5

Global,
Local

CURSOR_STATUS ({local, cursor_name}|{globla,

cursor_name} | {variable, cursor_variable})

CURSOR_STATUS


STATIC KEYSET

-1

DYNAMIC 0, 1



-2

-3



DECLARE

sp_describe-cursor
Stored Procedure sp_describe_cursor

Stored Procedure

Stored Procedure

sp_describe_cursor [@cursor_return =]
output_cursor_variable OUTPUT

{ [, [@cursor_source =] local, [@cursor_identity =]

local_cursor_name] | -- local

[ [, [@cursor_source =] global, [@cursor_identity =]

local_cursor_name] | -- global

{ [, [@cursor_source =] variable, [@cursor_identity =]

input_cursor_variable] | --
Stored Procedure

Cur_Products
@Report


sp_describe_cursor

CURSOR_SCOP

1 = LOCAL 2 = GLOBAL

STATUS
MODEL

CURSOR_STATUS
1 = Static 2 = Scroll licks 3 =
Optimistic

CONCURRENC

1 = Read only 2 = Scroll locks 3 =

SCROLLABLE

0 = Forward only 1 = Scrollabel

OPEN_STATUS

Optimistic

0 = Closed 1 = Open

CURSOR_ROWS
@@CURSOR_ROWS

FETCH_STATUS Fetch

@@FETCH_STATUS
0 = Fetch
- 1 = Fetch

- 2 =

- 9 = Fetch
COLUMN_COU

ROW_COUNT

NT

@@ROWCOUNT
LAST_OPERATI
ON

0 =
1 = OPEN

2 = FETCH

3 = INSERT

4 = UPDATE

5 = DELETE

6 = CLOSE

7 = DEALLOCATE

You might also like