| 導購 | 订阅 | 在线投稿
分享
 
 
 

【原創】T-SQL遊標使用

來源:互聯網網民  2007-01-29 12:06:29  評論

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 { { [ GLOBAL ] 遊標名 } | 遊標變量名 }

使用DEALLOCATE語句刪除遊標,其語法格式如下:

DEALLOCATE { { [ GLOBAL ] 遊標名 } | @遊標變量名

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 語句之前測試該變量的值才能作出正確的判斷。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
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 { { [ GLOBAL ] 遊標名 } | 遊標變量名 } 使用DEALLOCATE語句刪除遊標,其語法格式如下: DEALLOCATE { { [ GLOBAL ] 遊標名 } | @遊標變量名 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 語句之前測試該變量的值才能作出正確的判斷。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有