屬性(僅讀或可修改)
其語法格式如下:
DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR
FOR select_statement
[FOR {READ ONLY | UPDATE [OF column_name [,...n]]}]
其中:
cursor_name
指游標(biāo)的名字。
INSENSITIVE
表明MS SQL SERVER 會將游標(biāo)定義所選取出來的數(shù)據(jù)記錄存放在一臨時表內(nèi)(建立在tempdb 數(shù)據(jù)庫下)。對該游標(biāo)的讀取操作皆由臨時表來應(yīng)答。因此,對基本表的修改并不影響游標(biāo)提取的數(shù)據(jù),即游標(biāo)不會隨著基本表內(nèi)容的改變而改變,同時也無法通過
游標(biāo)來更新基本表。如果不使用該保留字,那么對基本表的更新、刪除都會反映到游標(biāo)中。
另外應(yīng)該指出,當(dāng)遇到以下情況發(fā)生時,游標(biāo)將自動設(shè)定INSENSITIVE 選項。
在SELECT 語句中使用DISTINCT、 GROUP BY、 HAVING UNION 語句;
使用OUTER JOIN;
所選取的任意表沒有索引;
將實數(shù)值當(dāng)作選取的列。
上面介紹的是SQL_92 的游標(biāo)語法規(guī)則。下面介紹MS SQL SERVER 提供的擴展了的游標(biāo)聲明語法,通過增加另外的保留字,使游標(biāo)的功能進一步得到了增強其語法規(guī)則為;
LOCAL
定義游標(biāo)的作用域僅限在其所在的存儲過程、觸發(fā)器或批處理中。當(dāng)建立游標(biāo)的存儲過程執(zhí)行結(jié)束后,游標(biāo)會被自動釋放。因此,我們常在存儲過程中使用OUTPUT 保留字,將游標(biāo)傳遞給該存儲過程的調(diào)用者,這樣在存儲過程執(zhí)行結(jié)束后,可以引用該游標(biāo)變量,在該種情況下,直到引用該游標(biāo)的最后一個就是被釋放時,游標(biāo)才會自動釋放。
GLOBAL
定義游標(biāo)的作用域是整個會話層會話層指用戶的連接時間它包括從用戶登錄到SQLSERVER 到脫離數(shù)據(jù)庫的整段時間。選擇GLOBAL 表明在整個會話層的任何存儲過程、觸發(fā)器或批處理中都可以使用該游標(biāo),只有當(dāng)用戶脫離數(shù)據(jù)庫、時該游標(biāo)才會被自動釋放。
注意:如果既未使用GLOBAL也未使用LOCAL,那么SQL SERVER將使用default local cursor數(shù)據(jù)庫選項,為了與以彰的版本歉容,該選項常設(shè)置為FALSE。