如果對(duì)數(shù)據(jù)進(jìn)行遍歷循環(huán)操作,通過(guò) SQL 的游標(biāo)就可以實(shí)現(xiàn),下面就為您詳細(xì)介紹該方法,供您參考,希望對(duì)您學(xué)習(xí)SQL數(shù)據(jù)庫(kù)能夠有所幫助。
SQL游標(biāo)的優(yōu)點(diǎn)是可以方便從一個(gè)結(jié)果集中進(jìn)行循環(huán)遍歷數(shù)據(jù)在進(jìn)行操作。
1、游標(biāo)允許應(yīng)用程序?qū)Σ樵?xún)語(yǔ)句select 返回的行結(jié)果集中每一行進(jìn)行相同或不同的操作,而不是一次對(duì)整個(gè)結(jié)果集進(jìn)行同一種操作;
2、它還提供對(duì)基于游標(biāo)位置而對(duì)表中數(shù)據(jù)進(jìn)行刪除或更新的能力;
3、游標(biāo)把作為面向集合的數(shù)據(jù)庫(kù)管理系統(tǒng)和面向行的程序設(shè)計(jì)兩者聯(lián)系起來(lái),使兩個(gè)數(shù)據(jù)處理方式能夠進(jìn)行溝通。?
???????然而游標(biāo)也有缺點(diǎn)——復(fù)雜和低效,是游標(biāo)的最大缺點(diǎn),也是致使很多時(shí)候在使用存儲(chǔ)過(guò)程中沒(méi)有想到游標(biāo)的主要原因。
1
--
將book表中的LookCount(int型)字段加上800-1000的隨機(jī)整數(shù)
2
declare
@bid
int
3
declare
cur
cursor
4
read_only
5
for
select
bid
from
dbo.Book
6
open
cur
7
fetch
next
from
cur
into
@bid
8
while
(
@@fetch_status
=
0
)
9
begin
10
update
dbo.Book
set
LookCount
=
LookCount
+
cast
((
rand
()
*
(
1000
-
800
)
+
800
)
as
int
)
where
bid
=
@bid
11
fetch
next
from
cur
into
@bid
12
end
13
close
cur
14
deallocate
cur
?
使用游標(biāo)的順序: 聲名游標(biāo)、打開(kāi)游標(biāo)、讀取數(shù)據(jù)、關(guān)閉游標(biāo)、刪除游標(biāo)。
由于 @@FETCH_STATUS 對(duì)于在一個(gè)連接上的所有游標(biāo)是全局性的,要小心使用 @@FETCH_STATUS 。在執(zhí)行一條 FETCH 語(yǔ)句后,必須在對(duì)另一游標(biāo)執(zhí)行另一 FETCH 語(yǔ)句前測(cè)試 @@FETCH_STATUS 。在任何提取操作出現(xiàn)在此連接上前,@@FETCH_STATUS 的值沒(méi)有定義。
例如,用戶從一個(gè)游標(biāo)執(zhí)行一條 FETCH 語(yǔ)句,然后調(diào)用一個(gè)存儲(chǔ)過(guò)程,此存儲(chǔ)過(guò)程打開(kāi)并處理另一個(gè)游標(biāo)的結(jié)果。當(dāng)控制從被調(diào)用的存儲(chǔ)過(guò)程返回后,@@FETCH_STATUS 反映的是在存儲(chǔ)過(guò)程中執(zhí)行的最后的 FETCH 語(yǔ)句的結(jié)果,而不是在存儲(chǔ)過(guò)程被調(diào)用之前的 FETCH 語(yǔ)句的結(jié)果。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

