游標是一種處理資料的方法,主要用於儲存過程、觸發器和transact-sql指令碼中。select語句返回的是乙個結果集,游標能夠從包含多條資料記錄的結果集中每次提取一條記錄。
游標的特點:
◊ 允許對由select查詢語句返回的行集中的每一行執行相同或者不同的操作,而不是對整個集合執行同乙個操作。
◊ 提供對基於游標位置的表中的行進行刪除和更新。
宣告游標語法:
iso syntaxdeclare 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
@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
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...