游标的作用
???
????? 關(guān)系數(shù)據(jù)庫中的操作會(huì)對(duì)整個(gè)行集產(chǎn)生影響。由?????? SELECT?????? 語句返回的行集包括所有滿足該語句?????? WHERE?????? 子句中條件的行。由語句所返回的這一完整的行集被稱為結(jié)果集。應(yīng)用程序,特別是交互式聯(lián)機(jī)應(yīng)用程序,并不總能將整個(gè)結(jié)果集作為一個(gè)單元來有效地處理。這些應(yīng)用程序需要一種機(jī)制以便每次處理一行或一部分行。游標(biāo)就是提供這種機(jī)制的結(jié)果集擴(kuò)展。???
????
????? 游標(biāo)通過以下方式擴(kuò)展結(jié)果處理:?????
????
????? 允許定位在結(jié)果集的特定行。???
????
????
????? 從結(jié)果集的當(dāng)前位置檢索一行或多行。???
????
????
????? 支持對(duì)結(jié)果集中當(dāng)前位置的行進(jìn)行數(shù)據(jù)修改。???
????
????
????? 為由其他用戶對(duì)顯示在結(jié)果集中的數(shù)據(jù)庫數(shù)據(jù)所做的更改提供不同級(jí)別的可見性支持。???
????
????
????? 提供腳本、存儲(chǔ)過程和觸發(fā)器中使用的訪問結(jié)果集中的數(shù)據(jù)的?????? Transact-SQL?????? 語句。?????
????? 請(qǐng)求游標(biāo)???
????? Microsoft®?????? SQL?????? Server™?????? 2000?????? 支持兩種請(qǐng)求游標(biāo)的方法:?????
????
????? Transact-SQL?????
????? 對(duì)根據(jù)?????? SQL-92?????? 游標(biāo)語法制定的游標(biāo),Transact-SQL?????? 語言支持使用它們的語法。???
????
????? 數(shù)據(jù)庫應(yīng)用程序編程接口(API)游標(biāo)函數(shù)?????
????? SQL?????? Server?????? 支持這些數(shù)據(jù)庫?????? API?????? 的游標(biāo)功能:???
????
????? ADO(Microsoft?????? ActiveX®?????? 數(shù)據(jù)對(duì)象)???
????
????
????? OLE?????? DB???
????
????
????? ODBC(開放式數(shù)據(jù)庫連接)???
????
????
????? DB-Library?????
????? 應(yīng)用程序不能混合使用這兩種請(qǐng)求游標(biāo)的方法。已經(jīng)使用?????? API?????? 指定游標(biāo)行為的應(yīng)用程序不能再執(zhí)行?????? Transact-SQL?????? DECLARE?????? CURSOR?????? 語句請(qǐng)求一個(gè)?????? Transact-SQL?????? 游標(biāo)。只有在將所有?????? API?????? 游標(biāo)特性均設(shè)回默認(rèn)值后,應(yīng)用程序才可以執(zhí)行?????? DECLARE?????? CURSOR。???
????
????? 如果?????? Transact-SQL?????? 和?????? API?????? 游標(biāo)均未被請(qǐng)求,則默認(rèn)情況下?????? SQL?????? Server?????? 將一個(gè)完整的結(jié)果集返回給應(yīng)用程序,這個(gè)結(jié)果集稱為默認(rèn)結(jié)果集。???
????
????? 游標(biāo)進(jìn)程???
????? Transact-SQL?????? 游標(biāo)和?????? API?????? 游標(biāo)有不同的語法,但下列一般進(jìn)程可用于所有?????? SQL?????? Server?????? 游標(biāo):?????
????
????? 把游標(biāo)與?????? Transact-SQL?????? 語句的結(jié)果集相關(guān)聯(lián),并且定義游標(biāo)的特征,如是否能夠更新游標(biāo)中的行。???
????
????
????? 執(zhí)行?????? Transact-SQL?????? 語句以填充游標(biāo)。???
????
????
????? 檢索想要查看的游標(biāo)中的行。從游標(biāo)中檢索一行或多行的操作稱為提取。執(zhí)行一系列的提取操作以向前或向后檢索行的操作稱為滾動(dòng)。???
????
????
????? 根據(jù)需要,對(duì)游標(biāo)中當(dāng)前位置的行執(zhí)行修改操作(更新或刪除)。???
????
????
????? 關(guān)閉游標(biāo)。?????
簡(jiǎn)單的說,跟C語言里的指針相識(shí)???
????? 可以隨意移動(dòng)到需要的行
例:
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 UPDATE [ OF column_name [ ,...n ] ] ]
打開該游標(biāo)時(shí)所生成的結(jié)果集包括 pubs 數(shù)據(jù)庫的 authors 表中的所有行和列。可以更新該游標(biāo),對(duì)該游標(biāo)所做的所有更新和刪除均在提取中表現(xiàn)出來。因?yàn)闆]指定 SCROLL 選項(xiàng),FETCH NEXT 是唯一可用的提取選項(xiàng)。
DECLARE authors_cursor CURSOR
???? FOR SELECT * FROM authors
OPEN authors_cursor
FETCH NEXT FROM authors_cursor
牽套游標(biāo)
declare????? cursor????? Cursor_Name????? for?????
???? Select????? *????? from????? table_Name????? (for????? read????? only)???
???? fetch????? cursor_Name????? to????? variable_Name?????
???? ;???
???? ;???
???? ;????
注:fetch????? 從 Transact-SQL 服務(wù)器游標(biāo)中檢索特定的一行。
??
總結(jié)
- 上一篇: 数学之美系列16(转帖)
- 下一篇: 多点子接口的帧中继配置(MP SubIn