程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 入門(七)

SQL Server 入門(七)

編輯:關於SqlServer
i. 聲明游標
在這一步中,需要指定游標的屬性和根據要求產生的結果集。有兩種方法可以指定一個游標。
形式1 (ANSI 92)
DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR
FOR select_statement
[FOR {READ ONLY | UPDATE ][OF column_list]}]
形式2
DECLARE cursor_name CURSOR
[LOCAL | GLOBAL]
[FORWARD_ONLY | SCROLL]
[STATIC | KEYSET | DYNAMIC]
[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]
FOR select_statement
[FOR {READ ONLY | UPDATE ][OF column_list]}]
INSENSITIVE關鍵字指明要為檢索到的結果集建立一個臨時拷貝,以後的數據從這個臨時拷貝中獲取。如果在後來游標處理的過程中,原有基表中數據發生了改變,那麼它們對於該游標而言是不可見的。這種不敏感的游標不允許數據更改。
SCROLL關鍵字指明游標可以在任意方向上滾動。所有的fetch選項(first、last、next、relative、absolute)都可以在游標中使用。如果忽略該選項,則游標只能向前滾動(next)。
Select_statement指明SQL語句建立的結果集。Transact SQL語句COMPUTE、COMPUTE BY、FOR BROWSE和INTO在游標聲明的選擇語句中不允許使用。
READ ONLY指明在游標結果集中不允許進行數據修改。
UPDATE關鍵字指明游標的結果集可以修改。
OF column_list指明結果集中可以進行修改的列。缺省情況下(使用UPDATE關鍵字),所有的列都可進行修改。
LOCAL關鍵字指明游標是局部的,它只能在它所聲明的過程中使用。
GLOBAL關鍵字使得游標對於整個連接全局可見。全局的游標在連接激活的任何時候都是可用的。只有當連接結束時,游標才不再可用。
FORWARD_ONLY指明游標只能向前滾動。
STATIC的游標與INSENSITIVE的游標是相同的。
KEYSET指明選取的行的順序。SQL Server將從結果集中創建一個臨時關鍵字集。如果對數據庫的非關鍵字列進行了修改,則它們對游標是可見的。因為是固定的關鍵字集合,所以對關鍵字列進行修改或新插入列是不可見的。
DYNAMIC指明游標將反映所有對結果集的修改。
SCROLL_LOCK是為了保證游標操作的成功,而對修改或刪除加鎖。
OPTIMISTIC指明哪些通過游標進行的修改或者刪除將不會成功。
注意:
· 如果在SELECT語句中使用了DISTINCT、UNION、GROUP BY語句,且在選擇中包含了聚合表達式,則游標自動為INSENSITIVE的游標。
· 如果基表沒有唯一的索引,則游標創建成INSENSITIVE的游標。
· 如果SELECT語句包含了ORDER BY,而被ORDER BY的列並非唯一的行標識,則DYNAMIC游標將轉換成KEYSET游標。如果KEYSET游標不能打開,則將轉換成INSENSITIVE游標。使用SQL ANSI-92語法定義的游標同樣如此,只是沒有INSENSITIVE關鍵字而已。
ii. 打開游標
打開游標就是創建結果集。游標通過DECLARE語句定義,但其實際的執行是通過OPEN語句。語法如下:
OPEN { { [GLOBAL] cursor_name } | cursor_variable_name}
GLOBAL指明一個全局游標。
Cursor_name是被打開的游標的名稱。
Cursor_variable_name是所引用游標的變量名。該變量應該為游標類型。
在游標被打開之後,系統變量@@cursor_rows可以用來檢測結果集的行數。@@cursor_rows為負數時,表示游標正在被異步遷移,其絕對值(如果@@cursor_rows為-5,則絕對值為5)為當前結果集的行數。異步游標使用戶在游標被完全遷移時仍然能夠訪問游標的結果。
iii. 從游標中取值
在從游標中取值的過程中,可以在結果集中的每一行上來回移動和處理。如果游標定義成了可滾動的(在聲明時使用SCROLL關鍵字),則任何時候都可取出結果集中的任意行。對於非滾動的游標,只能對當前行的下一行實施取操作。結果集可以取到局部變量中。Fetch命令的語法如下:
FETCH [NEXT | PRIOR| FIRST | LAST | ABSOLUTE {n | @nvar} | RELATIVE {n | @nvar}]
FROM [GLOBAL] cursor_name} | cursor_variable_name}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved