SQL遊標的使用載)

來源:互聯網
上載者:User
SQL遊標的使用(轉載)

一、遊標包括兩個部分:
1、遊標結果集      由定義該遊標的select語句返回的行的集合
2、遊標位置         指向這個集合中某行的指標

二、遊標處理過程:
使用declare 語句聲明
使用open語句開啟
使用fecth語句從遊標中提取資料
判斷是否為空白,為空白no則返回上一步,不為空白yes
使用close關閉
使用deallocate釋放

1、聲明遊標:
declare 遊標名 [insensitive] [scroll] cursor for select語句     [for {read only | update [of 列[,....n]]}]
說明: insensitive 定義一個遊標,以建立將由該遊標使用的資料的臨時複本。
            scroll指定所有的提取項(first,last,prior,next,relative,absolute)均可用,預設為next
            在select語句中不允許用compute,compute by ,for browse和into

2、開啟遊標:
open {{[globa] 遊標名} | 遊標變數
說明:global 為全域遊標

3、從開啟的遊標中提取行

三、遊標類型
Const adOpenForwardOnly = 0
前向遊標,為預設遊標,提供最快的運行效能。用它開啟recordset,從對至尾順序取得所有結果。它不支援向後滾動,只允許在結果間單向移動。

Const adOpenKeyset = 1
靜態資料指標,反映第一次開啟遊標時表中資料的狀態,遊標無法查明底層表中的資料行是否更新過、刪除過或添加了新的資料。不過與只能前移的洲標不同,靜態資料指標可以在結果間前後滾動。

Const adOpenDynamic = 2
鍵盤驅動的遊標,可以查詢表中底層資料行的某些變化,但不是全部。它特別是可以準確反映資料是否更新過。但它不能查明其它使用者是否曾刪除過資料行(刪除掉的資料行在recordset中會留下空洞)。鍵盤驅動的遊標支援在結果間前後滾動。

Const adOpenStatic = 3
動態資料指標,是最豐富的遊標類型。遊標開啟時可以查詢其他使用者對錶的任何改動,而且支援滾動。

加鎖類型
Const adLockReadOnly = 1
預設的上鎖類型,唯讀方式上鎖允許多個使用者同時讀取同樣的資料,但不能改變資料。

Const adLockPessimistic = 2
以悲觀上鎖方式開啟資料對象。該方式假定在你編輯記錄時會有其它使用者訪問資料。此時一旦你開始編輯記錄,其它使用者就不能訪問該資料。

Const adLockOptimistic = 3
以樂觀上鎖方式開啟資料對象。該方式假定在你編輯記錄時不會有其它使用者訪問資料。在完成改變之前,其它使用者不能訪問該記錄。

Const adLockBatchOptimistic = 4
執行多行批處理更新時使用這種類型

六、綜合執行個體
用sql server遊標語句列印報表
DECLARE authors_cursor CURSOR FOR
SELECT au_id, au_fname, au_lname
FROM authors
WHERE state = "UT"
ORDER BY au_id

OPEN authors_cursor

FETCH NEXT FROM authors_cursor
INTO @au_id, @au_fname, @au_lname

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT " "
SELECT @message = "----- Books by Author: " +
@au_fname + " " + @au_lname

PRINT @message

-- Declare an inner cursor based
-- on au_id from the outer cursor.

DECLARE titles_cursor CURSOR FOR
SELECT t.title
FROM titleauthor ta, titles t
WHERE ta.title_id = t.title_id AND
ta.au_id = @au_id -- Variable value from the outer cursor

OPEN titles_cursor
FETCH NEXT FROM titles_cursor INTO @title

IF @@FETCH_STATUS <> 0
PRINT " <<No Books>>"

WHILE @@FETCH_STATUS = 0
BEGIN

SELECT @message = " " + @title
PRINT @message
FETCH NEXT FROM titles_cursor INTO @title

END

CLOSE titles_cursor
DEALLOCATE titles_cursor

-- Get the next author.
FETCH NEXT FROM authors_cursor
INTO @au_id, @au_fname, @au_lname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

0 0

0

(請您對文章做出評價)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.