最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入SQL Cursor基本用法的詳細(xì)介紹

 更新時(shí)間:2013年06月11日 11:01:51   作者:  
本篇文章是對(duì)SQL Cursor的基本用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
由于這個(gè)游標(biāo) 執(zhí)行一下就相當(dāng)于SELECT一下 其效率不敢恭維也沒(méi)做深入研究。
復(fù)制代碼 代碼如下:

 table1結(jié)構(gòu)如下
 id    int
 name  varchar(50)

 declare @id int
 declare @name varchar(50)
 declare cursor1 cursor for         --定義游標(biāo)cursor1
 select * from table1               --使用游標(biāo)的對(duì)象(跟據(jù)需要填入select文)
 open cursor1                       --打開(kāi)游標(biāo)

 fetch next from cursor1 into @id,@name  --將游標(biāo)向下移1行,獲取的數(shù)據(jù)放入之前定義的變量@id,@name中

 while @@fetch_status=0           --判斷是否成功獲取數(shù)據(jù)
 begin
 update table1 set name=name+'1'
 where id=@id                           --進(jìn)行相應(yīng)處理(跟據(jù)需要填入SQL文)

 fetch next from cursor1 into @id,@name  --將游標(biāo)向下移1行
 end

 close cursor1                   --關(guān)閉游標(biāo)
 deallocate cursor1

游標(biāo)一般格式:
DECLARE 游標(biāo)名稱(chēng) CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...
OPEN 游標(biāo)名稱(chēng)
FETCH NEXT FROM 游標(biāo)名稱(chēng) INTO 變量名1,變量名2,變量名3,...
WHILE @@FETCH_STATUS=0
        BEGIN
                  SQL語(yǔ)句執(zhí)行過(guò)程... ...
                  FETCH NEXT FROM 游標(biāo)名稱(chēng) INTO 變量名1,變量名2,變量名3,...
        END
CLOSE 游標(biāo)名稱(chēng)
DEALLOCATE 游標(biāo)名稱(chēng) (刪除游標(biāo))
復(fù)制代碼 代碼如下:

例子:
/*
功能:數(shù)據(jù)庫(kù)表格tbl_users數(shù)據(jù)
deptid userid username
1          100      a
1      101      b
2      102      c
要求用一個(gè)sql語(yǔ)句輸出下面結(jié)果
deptid username
1        ab
2        c
[要求用游標(biāo)實(shí)現(xiàn)設(shè)計(jì): OK_008
時(shí)間: 2006-05
備注:無(wú)
*/
create table #Temp1(deptid int,userid int,username varchar(20)) --待測(cè)試的數(shù)據(jù)表
create table #Temp2(deptid int,username varchar(20))                --結(jié)果表
--先把一些待測(cè)試的數(shù)據(jù)插入到待測(cè)試表#Temp1中
insert into #Temp1
select 1,100,'a' union all
select 1,101,'b' union all
select 1,131,'d' union all
select 1,201,'f' union all
select 2,302,'c' union all
select 2,202,'a' union all
select 2,221,'e' union all
select 3,102,'y' union all
select 3,302,'e' union all
select 3,121,'t'
--
declare @deptid int,@username varchar(20)
--定義游標(biāo)
declare Select_cursor cursor for
        select deptid,username from #Temp1
open Select_cursor
fetch next from Select_cursor into @deptid,@username    --提取操作的列數(shù)據(jù)放到局部變量中
while @@fetch_status=0      --返回被 FETCH 語(yǔ)句執(zhí)行的最后游標(biāo)的狀態(tài)
/*
@@FETCH_STATUS =0          FETCH 語(yǔ)句成功
@@FETCH_STATUS =-1 FETCH 語(yǔ)句失敗或此行不在結(jié)果集中
@@FETCH_STATUS =-2 被提取的行不存在
*/
        begin
                  --當(dāng)表#Temp2列deptid存在相同的數(shù)據(jù)時(shí),就直接在列username上追加@username值
                  if(exists(select * from #Temp2 where deptid=@deptid ))
                          update #Temp2 set username=username +@username where deptid=@deptid
                  else
                  --插入新數(shù)據(jù)
                          insert into #Temp2 select @deptid,@username
                  fetch next from Select_cursor into @deptid,@username
        end
close Select_cursor     
deallocate Select_cursor
select * from #Temp2 --測(cè)試結(jié)果
Drop table #Temp1,#Temp2
您可能感興趣的文章:

相關(guān)文章

最新評(píng)論

萝北县| 额尔古纳市| 博白县| 武宁县| 嘉荫县| 绥阳县| 华池县| 射洪县| 隆安县| 湟源县| 新源县| 甘肃省| 沿河| 盖州市| 体育| 松江区| 方山县| 乌兰县| 杨浦区| 佛坪县| 雷山县| 郯城县| 宁晋县| 塘沽区| 万州区| 明水县| 社旗县| 宝坻区| 梁山县| 耿马| 北宁市| 塔河县| 久治县| 阜南县| 昂仁县| 内乡县| 兰溪市| 台前县| 赫章县| 新和县| 紫金县|