SQL Curserの基本的な使い方について詳しく紹介します。
この遊覧標識の実行は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