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