日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

SQL游标使用方法SQL游标使用方法(转)

發(fā)布時(shí)間:2023/12/13 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL游标使用方法SQL游标使用方法(转) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 為何使用游標(biāo):    使用游標(biāo)(cursor)的一個(gè)主要的原因就是把集合操作轉(zhuǎn)換成單個(gè)記錄處理方式。用SQL語(yǔ)言從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)后,結(jié)果放在內(nèi)存的一塊區(qū)域中,且結(jié)果往往是一個(gè)含有多個(gè)記錄的集合。游標(biāo)機(jī)制允許用戶在SQL server內(nèi)逐行地訪問(wèn)這些記錄,按照用戶自己的意愿來(lái)顯示和處理這些記錄。   

2. 如何使用游標(biāo):    一般地,使用游標(biāo)都遵循下列的常規(guī)步驟:    (1) 聲明游標(biāo)。把游標(biāo)與T-SQL語(yǔ)句的結(jié)果集聯(lián)系起來(lái)。    (2) 打開(kāi)游標(biāo)。    (3) 使用游標(biāo)操作數(shù)據(jù)。    (4) 關(guān)閉游標(biāo)。   

2.1. 聲明游標(biāo)    DECLARE CURSOR語(yǔ)句SQL-92標(biāo)準(zhǔn)語(yǔ)法格式:    DECLARE 游標(biāo)名 [ INSENSITIVE ] [ SCROLL ] CURSOR    FOR sql-statement    Eg:    Declare MycrsrVar Cursor    FOR Select * FROM tbMyData   

2.2 打開(kāi)游標(biāo)    OPEN MycrsrVar    當(dāng)游標(biāo)被打開(kāi)時(shí),行指針將指向該游標(biāo)集第1行之前,如果要讀取游標(biāo)集中的第1行數(shù)據(jù),必須移動(dòng)行指針使其指向第1行。就本例而言,可以使用下列操作讀取第1行數(shù)據(jù):    FETCH FIRST from E1cursor    或 FETCH NEXT from E1cursor      

2.3 使用游標(biāo)操作數(shù)據(jù)    下面的示例用@@FETCH_STATUS控制在一個(gè)WHILE循環(huán)中的游標(biāo)活動(dòng)    /* 使用游標(biāo)讀取數(shù)據(jù)的操作如下。*/    DECLARE E1cursor cursor /* 聲明游標(biāo),默認(rèn)為FORWARD_ONLY游標(biāo) */    FOR SELECT * FROM c_example    OPEN E1cursor /* 打開(kāi)游標(biāo) */    FETCH NEXT from E1cursor /* 讀取第1行數(shù)據(jù)*/    WHILE @@FETCH_STATUS = 0 /* 用WHILE循環(huán)控制游標(biāo)活動(dòng) */    BEGIN    FETCH NEXT from E1cursor /* 在循環(huán)體內(nèi)將讀取其余行數(shù)據(jù) */    END    CLOSE E1cursor /* 關(guān)閉游標(biāo) */    DEALLOCATE E1cursor /* 刪除游標(biāo) */ ? ? declare @id int,@name varchar(20); ? declare cur cursor fast_forward for ???? select id,name from a; ? open cur; ? fetch next from cur into @id,@name; ? while @@fetch_status=0 ? begin ????? --做你要做的事 ????? fetch next from cur into @id,@name; ? end ? close cur; ? deallocate cur;

  

2.4 關(guān)閉游標(biāo)    使用CLOSE語(yǔ)句關(guān)閉游標(biāo)    CLOSE { { [ GLOBAL ] 游標(biāo)名 } | 游標(biāo)變量名 }      使用DEALLOCATE語(yǔ)句刪除游標(biāo),其語(yǔ)法格式如下:    DEALLOCATE { { [ GLOBAL ] 游標(biāo)名 } | @游標(biāo)變量名       3. FETCH操作的簡(jiǎn)明語(yǔ)法如下:       FETCH    [ NEXT | PRIOR | FIRST | LAST]    FROM    { 游標(biāo)名 | @游標(biāo)變量名 } [ INTO @變量名 [,…] ]      參數(shù)說(shuō)明:    NEXT 取下一行的數(shù)據(jù),并把下一行作為當(dāng)前行(遞增)。由于打開(kāi)游標(biāo)后,行指針是指向該游標(biāo)第1行之前,所以第一次執(zhí)行FETCH NEXT操作將取得游標(biāo)集中的第1行數(shù)據(jù)。NEXT為默認(rèn)的游標(biāo)提取選項(xiàng)。    INTO @變量名[,…] 把提取操作的列數(shù)據(jù)放到局部變量中。列表中的各個(gè)變量從左到右與游標(biāo)結(jié)果集中的相應(yīng)列相關(guān)聯(lián)。各變量的數(shù)據(jù)類型必須與相應(yīng)的結(jié)果列的數(shù)據(jù)類型匹配或是結(jié)果列數(shù)據(jù)類型所支持的隱性轉(zhuǎn)換。變量的數(shù)目必須與游標(biāo)選擇列表中的列的數(shù)目一致。

   --------------------------------------------------------------------------------------------------------------------------------

  每執(zhí)行一個(gè)FETCH操作之后,通常都要查看一下全局變量@@FETCH_STATUS中的狀態(tài)值,以此判斷FETCH操作是否成功。該變量有三種狀態(tài)值:    · 0 表示成功執(zhí)行FETCH語(yǔ)句。    · -1 表示FETCH語(yǔ)句失敗,例如移動(dòng)行指針使其超出了結(jié)果集。    · -2 表示被提取的行不存在。   由于@@FETCH_STATU是全局變量,在一個(gè)連接上的所有游標(biāo)都可能影響該變量的值。因此,在執(zhí)行一條FETCH語(yǔ)句后,必須在對(duì)另一游標(biāo)執(zhí)行另一FETCH 語(yǔ)句之前測(cè)試該變量的值才能作出正確的判斷。 ? Declare @變量名1 變量類型1 Declare @變量名2 變量類型2 declare cur cursor fast_forward for select 字段名1,字段名2 from 表名1; open cur; fetch next from cur into @變量名1,@變量名2; while @@fetch_status=0 begin update 表名2 set 字段名1=@變量名1 whare 字段名2=@變量名2 fetch next from cur into @變量名1,@變量名2; end close cur; deallocate cur; 關(guān)閉提示 關(guān)閉確 認(rèn) 取

轉(zhuǎn)載于:https://www.cnblogs.com/qwiang/p/4401522.html

總結(jié)

以上是生活随笔為你收集整理的SQL游标使用方法SQL游标使用方法(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。