首頁  >  文章  >  php教程  >  用SQL遊標遍歷循環資料的方法

用SQL遊標遍歷循環資料的方法

高洛峰
高洛峰原創
2016-12-14 11:56:301284瀏覽

如果對資料進行遍歷循環操作,透過SQL的遊標就可以實現,以下就為您詳細介紹該方法,供您參考,希望對您學習SQL資料庫能有所幫助。

SQL遊標的優點是可以方便從一個結果集中進行循環遍歷資料在進行操作。
1、遊標允許應用程式對查詢語句select 傳回的行結果集中每一行進行相同或不同的操作,而不是一次對整個結果集進行同一種操作;
2、它還提供對基於遊標位置而對錶中資料進行刪除或更新的能力;
3、遊標把作為面向集合的資料庫管理系統和麵向行的程式設計兩者連結起來,使兩個資料處理方式能夠進行溝通。 
        然爾遊標也有缺點-複雜和低效,是遊標的最大缺點,也是致使許多時候在使用預存程序中沒有想到遊標的主要原因。

下面是在實際工作中的一個遊標實例的應用,透過遊標把A表的資料的一列值複製到B表的列當中,其中二個表都有相同的UID字段,條件是對相同UID的資料複製.

declare @level varchar(100)
declare @uid varchar(100)
declare cur cursor--定義一個遊標
read_only
for select egg_pri. _id =egg_code.user_id--為所獲得的資料集指定遊標

open cur--開啟遊標

fetch next from cur into @uid,@level--把擷取運算的資料列資料放到局部變數中
while(@ @fetch_status=0)--傳回被FETCH 語句執行的最後一個遊標的狀態,而不是任何目前被連線開啟的遊標的狀態。

begin

--print '等級:'+@level+'--------------使用者ID:'+@uid

update egg_code set prize_level=@level   where user_id=@uid --執行操作

--提前下一位資訊

fetch next from cur into @uid,@level
end
close cur--關閉遊標
deallocate cur--刪除遊標
go

使用遊標的順序: 聲名遊標、開啟遊標、讀取資料、關閉遊標、刪除遊標。

由於 @@FETCH_STATUS 對於在一個連接上的所有遊標是全域性的,請小心使用 @@FETCH_STATUS 。執行一個 FETCH 語句後,必須在另一個遊標執行另一個 FETCH 語句前測試 @@FETCH_STATUS 。在任何提取操作出現在此連線之前,@@FETCH_STATUS 的值沒有定義。
例如,使用者從一個遊標執行一條 FETCH 語句,然後呼叫一個預存程序,此預存程序開啟並處理另一個遊標的結果。當控制項從已呼叫的預存程序傳回後,@@FETCH_STATUS 反映的是預存程序中執行的最後的 FETCH 語句的結果,而不是在預存程序被呼叫之前的 FETCH 語句的結果。
使用上面的遊標是泉州SEO在一次網站砸金蛋活動中,二個表的資料在使用的過程中有部份後期改到程式致使有部份資料無法同步,導致前台查詢的時候所用到的表無法查到相關的數據,沒用遊標進行操作之前試過只用簡單的SQL語句去實現這樣的同步功能,但是始終無法實現,所以只能使用遊標來實現。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn