Sql Server系列 游標

2021-09-08 10:36:51 字數 3294 閱讀 1235

游標是一種處理資料的方法,主要用於儲存過程、觸發器和transact-sql指令碼中。select語句返回的是乙個結果集,游標能夠從包含多條資料記錄的結果集中每次提取一條記錄。

游標的特點:

◊ 允許對由select查詢語句返回的行集中的每一行執行相同或者不同的操作,而不是對整個集合執行同乙個操作。

◊ 提供對基於游標位置的表中的行進行刪除和更新。

宣告游標語法:

iso syntax

declare cursor_name [

insensitive ][

scroll

]cursor

forselect_statement

[for ][;

]transact

-sql extended syntax

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

]] ][;

]

在使用游標之前,必須開啟游標。

開啟游標的語法格式:

open  | cursor_variable_name }

開啟游標之後,可以讀取游標中的資料。fetch用來讀取游標中的某一行資料。

fetch語句的語法格式:

fetch

[[ next | prior | first | last

| absolute

| relative

]from

] |

@cursor_variable_name} [

into @variable_name [ ,...n

] ]

在不使用游標的時候,可以將其關閉,以釋放游標所占用的伺服器資源。

關閉游標close語法格式:

close  | cursor_variable_name }

游標操作的結果集空間雖然被釋放了,但是游標結構本身也會占用一定的資源,所以在使用完游標之後,為了收回被游標占用的資源,應該講游標釋放。

釋放游標deallocate語法格式:

deallocate  |

@cursor_variable_name }

declare

@cur_product

cursor

--宣告游標變數

declare cur_product cursor

for--

建立游標

select

[productid

],[productname

]from

[dbo

].[product

]open cur_product --

開啟游標

set@cur_product

= cur_product --

為游標變數賦值

fetch

next

from

@cur_product

--從游標變數中讀取值

while

@@fetch_status=0

--判斷fetch語句是否獲取到記錄

begin

fetch

next

from

@cur_product

--讀取游標變數中的資料

endclose

@cur_product

--關閉游標

deallocate

@cur_product

--釋放游標

declare

@productid

intdeclare cur_product cursor fast_forward read_only for

select

[productid

]from

[dbo

].[product

]orderby[

productid

]desc

open

cur_product

fetch

next

from cur_product into

@productid

while

@@fetch_status=0

begin

print

@productid

fetch

next

from cur_product into

@productid

endclose

cur_product

deallocate cur_product

declare

@productid

intdeclare

@productname

varchar(50

)declare cur_product cursor fast_forward read_only for

select

[productid

],[productname

]from

[dbo

].[product

]open

cur_product

fetch

next

from cur_product into

@productid,@productname

while

@@fetch_status=0

begin

print

convert(varchar, @productid) +''

+@productname

fetch

next

from cur_product into

@productid,@productname

endclose

cur_product

deallocate cur_product

mysql游標很慢 Sqlserver 游標 慢

net專案中有個模組做統計功能,原先方法速度很慢,所以需要改進,統計結果如下圖 下圖接上圖後面 原先的處理方式是,這些資料分別涉及到四五張表,前台從資料庫中查詢出需要的資料集,然後分別遍歷這些資料集拼接html字串顯示在介面上。優化思考 net專案中有個模組做統計功能,原先方法速度很慢,所以需要改進...

SQL Server 游標使用

游標概念 資料庫操作中我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?游標為我們提供了一種極為優秀的解決方案。游標 cursor 是系統為使用者開設的乙個資料緩衝區,存放sql語句的執行結果。每個游標區都有乙個名字。使用者可以用sql語句逐一從游標中獲取記錄,並賦...

sqlserver游標使用

create procedure pk test as 宣告2個變數 declare o id nvarchar 20 declare a salary float 宣告乙個游標mycursor,select語句中引數的個數必須要和從游標取出的變數名相同 declare mycursor curso...