SQL Cursor 기본 용법 에 대한 상세 한 소개

3057 단어 sqlcursor
이 커서 를 실행 하면 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

좋은 웹페이지 즐겨찾기