SQL Curserの基本的な使い方について詳しく紹介します。

3007 ワード

この遊覧標識の実行はSELECTに相当します。その効率はお世辞もせず、深く研究していません。

 table1
 id    int
 name  varchar(50)

 declare @id int
 declare @name varchar(50)
 declare cursor1 cursor for         -- cursor1
 select * from table1               -- ( select )
 open cursor1                       --

 fetch next from cursor1 into @id,@name  -- 1 , @id,@name

 while @@fetch_status=0           --
 begin
 update table1 set name=name+'1'
 where id=@id                           -- ( SQL )

 fetch next from cursor1 into @id,@name  -- 1
 end

 close cursor1                   --
 deallocate cursor1
ランドマーク一般フォーマット:DECLAREランドマーク名CURSOR FOR SELECTフィールド1、フィールド2、フィールド3、…FROMテーブル名WHERE…OPEN游戏名称FETCH NEXT FROM游戏名称INTO変数名1、変数名2、変数名3、…WHILE@FETCHSTATUS=0        BEGIN                  SQL文実行プロセス…                  FETCH NEXT FROMラベル名INTO変数名1、変数名2、変数名3…        ENDCLOSE游戏名称DEALLOCATE游戏名称(游戏名称削除)


/*
: tbl_users
deptid userid username
1          100      a
1      101      b
2      102      c
sql
deptid username
1        ab
2        c
[ : OK_008
: 2006-05

*/
create table #Temp1(deptid int,userid int,username varchar(20)) --
create table #Temp2(deptid int,username varchar(20))                --
-- #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)
--
declare Select_cursor cursor for
        select deptid,username from #Temp1
open Select_cursor
fetch next from Select_cursor into @deptid,@username    --
while @@fetch_status=0      -- FETCH
/*
@@FETCH_STATUS =0          FETCH
@@FETCH_STATUS =-1 FETCH
@@FETCH_STATUS =-2
*/
        begin
                  -- #Temp2 deptid , username @username
                  if(exists(select * from #Temp2 where deptid=@deptid ))
                          update #Temp2 set username=username +@username where deptid=@deptid
                  else
                  --
                          insert into #Temp2 select @deptid,@username
                  fetch next from Select_cursor into @deptid,@username
        end
close Select_cursor     
deallocate Select_cursor
select * from #Temp2 --
Drop table #Temp1,#Temp2