1. 為何使用游標:
使用游標(cursor)的乙個主要的原因就是把集合操作轉換成單個記錄處理方式。用sql語言從資料庫中檢索資料後,結果放在記憶體的一塊區域中,且結果往往是乙個含有多個記錄的集合。游標機制允許使用者在sql server內逐行地訪問這些記錄,按照使用者自己的意願來顯示和處理這些記錄。
2. 如何使用游標:
一般地,使用游標都遵循下列的常規步驟:
(1) 宣告游標。把游標與t-sql語句的結果集聯絡起來。
(2) 開啟游標。
(3) 使用游標運算元據。
(4) 關閉游標。
2.1. 宣告游標
declare cursor語句sql-92標準語法格式:
declare 游標名 [ insensitive ] [ scroll ] cursor
for sql-statement
eg:
declare mycrsrvar cursor
for select * from tbmydata
2.2 開啟游標
open mycrsrvar
當游標被開啟時,行指標將指向該游標集第1行之前,如果要讀取游標集中的第1行資料,必須移動行指標使其指向第1行。就本例而言,可以使用下列操作讀取第1行資料:
fetch first from e1cursor
或 fetch next from e1cursor
2.3 使用游標運算元據
下面的示例用@@fetch_status控制在乙個while迴圈中的游標活動
/* 使用游標讀取資料的操作如下。*/
declare e1cursor cursor /* 宣告游標,預設為forward_only游標 */
for select * from c_example
open e1cursor /* 開啟游標 */
fetch next from e1cursor /* 讀取第1行資料*/
while @@fetch_status = 0 /* 用while迴圈控制游標活動 */
begin
fetch next from e1cursor /* 在迴圈體內將讀取其餘行資料 */
end
close e1cursor /* 關閉游標 */
deallocate e1cursor /* 刪除游標 */
2.4 關閉游標
使用close語句關閉游標
close | 游標變數名 }
使用deallocate語句刪除游標,其語法格式如下:
deallocate | @游標變數名
3. fetch操作的簡明語法如下:
fetch
[ next | prior | first | last]
from
[ into @變數名 [,…] ]
引數說明:
next 取下一行的資料,並把下一行作為當前行(遞增)。由於開啟游標後,行指標是指向該游標第1行之前,所以第一次執行fetch next操作將取得游標集中的第1行資料。next為預設的游標提取選項。
into @變數名[,…] 把提取操作的列資料放到區域性變數中。列表中的各個變數從左到右與游標結果集中的相應列相關聯。各變數的資料型別必須與相應的結果列的資料型別匹配或是結果列資料型別所支援的隱性轉換。變數的數目必須與游標選擇列表中的列的數目一致。
每執行乙個fetch操作之後,通常都要檢視一下全域性變數@@fetch_status中的狀態值,以此判斷fetch操作是否成功。該變數有三種狀態值:
・ 0 表示成功執行fetch語句。
・ -1 表示fetch語句失敗,例如移動行指標使其超出了結果集。
・ -2 表示被提取的行不存在。
由於@@fetch_statu是全域性變數,在乙個連線上的所有游標都可能影響該變數的值。因此,在執行一條fetch語句後,必須在對另一游標執行另一fetch 語句之前測試該變數的值才能作出正確的判斷。
資料庫游標
資料庫之 游標 轉貼 在資料庫開發過程中,當你檢索的資料只是一條記錄時,你所編寫的事務語句 往往使用select insert 語句。但是我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?游標為我們提供了一種極為優秀的解決方案。1.游標和游標的優點 在資料庫中,游標...
資料庫游標
資料庫游標 2007 10 10 15 40 游標提供了一種對從表中檢索出的資料進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制。游標總是與一條t sql 選擇語句相關聯因為游標由結果集 可以是零條 一條或由相關的選擇語句檢索出的多條記錄 和結果集...
資料庫游標
1.為何使用游標 使用游標 cursor 的乙個主要的原因就是把集合操作轉換成單個記錄處理方式。用sql語言從資料庫中檢索資料後,結果放在記憶體的一塊區域中,且結果往往是乙個含有多個記錄的集合。游標機制允許使用者在sql server內逐行地訪問這些記錄,按照使用者自己的意願來顯示和處理這些記錄。2...