/*
游標使用步驟:
declare cursor 定義 transact-sql 伺服器游標的屬性,例如游標的滾動行為和用於生成游標所操作的結果集的查詢。
open 語句填充結果集,
fetch 從結果集返回行。
close 語句釋放與游標關聯的當前結果集。
deallocate 語句釋放游標所使用的資源。
宣告游標語法:
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 ] ] ]
*/
--測試
set nocount on
declare @guid uniqueidentifier
declare @name varchar(50)
declare @value decimal(18,4)
declare @insertdate datetime
declare @mark bit
declare mycur cursor type_warning
for select [guid],[name],[value],[insertdate],[mark] from [dbo].[curtab]
-- for update of [value]
open mycur
--fetch first from mycur into @guid,@name,@value,@insertdate,@mark
fetch next from mycur into @guid,@name,@value,@insertdate,@mark
--waitfor delay '01:00:00' --用於測試 scroll_locks 和 optimistic
while @@fetch_status = 0
begin
--update [dbo].[curtab] set [value]=0 where current of mycur
fetch next from mycur into @guid,@name,@value,@insertdate,@mark
endclose mycur
deallocate mycur
set nocount off
官方說明和測試總結:
靜態游標較快,滾動游標較慢(測試中,靜態游標查詢5秒,滾動游標查詢9~13秒)
local :
游標的範圍對在其中建立它的批處理、儲存過程或觸發器有效;
global:
同乙個連線會話中,任何儲存過程或批處理中,都可以引用該游標名稱;
forward_only:
靜態或動態游標(依情況而定),只進游標,只允許 fetch next;
scroll:
滾動游標,允許 first、last、prior、next、relative、absolute 定位游標;
static:
靜態游標,游標資料從 tempdb 取出(不變);
keyset:
靜態或動態游標(依情況而定),在 tempdb 中生成 keyset 表固定游標行記錄和順序;
dynamic:
滾動游標,游標資料從當前表中取出(可變);
fast_forward:
靜態游標,只進游標,只允許 fetch next;
read_only:
靜態游標,唯讀游標,可定義進退;
scroll_locks:
滾動游標,讀入游標時鎖定實際表的行記錄;
optimistic:
滾動游標,讀入游標時不鎖定實際表的行記錄;
type_warning:
游標型別隱式轉換為另一種型別時向客戶端發出警告(參考:使用隱式游標轉換);
for update:
定義游標中可更新的列;
declare cursor 不指定 read_only、optimistic 或 scroll_locks,則預設值如下:
> 如果 select 語句不支援更新(由於許可權不夠、訪問的遠端表不支援更新等等),則游標為 read_only。
> static 和 fast_forward 游標預設為 read_only。
> dynamic 和 keyset 游標預設為 optimistic。
Sqlserver 游標百度說明
1 游標使用流程 2use book3go 4declare stuname varchar 400 5 declare major varchar 400 6 宣告乙個游標並與sql語句關聯 7declare mycursor cursor for8 select stuname,major fr...
SQLServer 游標簡介與使用說明
游標 cursor 是處理資料的一種方法,為了檢視或者處理結果集中的資料,游標提供了在結果集中一次以行或者多行前進或向後瀏覽資料的能力。我們可以把游標當作乙個指標,它可以指定結果中的任何位置,然後允許使用者對指定位置的資料進行處理。1.游標的組成 游標包含兩個部分 乙個是游標結果集 乙個是游標位置。...
SQLServer 游標簡介與使用說明
游標 cursor 是處理資料的一種方法,為了檢視或者處理結果集中的資料,游標提供了在結果集中一次以行或者多行前進或向後瀏覽資料的能力。我們可以把游標當作乙個指標,它可以指定結果中的任何位置,然後允許使用者對指定位置的資料進行處理。1.游標的組成 游標包含兩個部分 乙個是游標結果集 乙個是游標位置。...