打開 Transact-SQL 服務(wù)器游標(biāo),然后通過執(zhí)行在 DECLARE CURSOR 或 SET cursor_variable 語句中指定的 Transact-SQL 語句填充游標(biāo)。
OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }
GLOBAL
指定 cursor_name 指的是全局游標(biāo)。
cursor_name
已聲明的游標(biāo)的名稱。如果全局游標(biāo)和局部游標(biāo)都使用 cursor_name 作為其名稱,那么如果指定了 GLOBAL,cursor_name 指的是全局游標(biāo),否則 cursor_name 指的是局部游標(biāo)。
cursor_variable_name
游標(biāo)變量的名稱,該名稱引用一個游標(biāo)。
如果使用 INSENSITIVE 或 STATIC 選項(xiàng)聲明了游標(biāo),那么 OPEN 將創(chuàng)建一個臨時表以保留結(jié)果集。如果結(jié)果集中任意行的大小超過 Microsoft® SQL Server™ 表的最大行大小,OPEN 將失敗。如果使用 KEYSET 選項(xiàng)聲明了游標(biāo),那么 OPEN 將創(chuàng)建一個臨時表以保留鍵集。臨時表存儲在 tempdb 中。
打開游標(biāo)后,可以使用 @@CURSOR_ROWS 函數(shù)在最后一次打開的游標(biāo)中接收合格行的數(shù)目。根據(jù)期望出現(xiàn)在結(jié)果集中的行數(shù),SQL Server 可能會選擇在一個單獨(dú)的線程中異步地填充鍵集驅(qū)動游標(biāo)。這就允許即使沒有充分地填充鍵集,也可以立即進(jìn)行提取。有關(guān)更多信息,請參見異步填充。
若要設(shè)置 SQL Server 異步生成鍵集時的閾值,請?jiān)O(shè)置 cursor threshold 配置選項(xiàng)。有關(guān)更多信息,請參見 sp_configure。
下面的示例打開一個游標(biāo)并且提取所有的行。
DECLARE Employee_Cursor CURSOR FOR相關(guān)文章
SELECT LastName, FirstName
FROM Northwind.dbo.Employees
WHERE LastName like 'B%'
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor