SQL Cursor 基本用法

2021-09-30 16:17:39 字數 3642 閱讀 4207

由於這個游標 執行一下就相當於select一下 其效率不敢恭維也沒做深入研究。

1table1結構如下

2id    

int3

name  

varchar(50

)45declare

@idint

6declare

@name

varchar(50

)7declare

cursor1 

cursor

for--

定義游標cursor1

8select

*from

table1               

--使用游標的物件(跟據需要填入select文)

9open

cursor1                       

--開啟游標

1011

fetch

next

from

cursor1 

into

@id,

@name

--將游標向下移1行,獲取的資料放入之前定義的變數@id,@name中

1213

while

@@fetch_status=0

--判斷是否成功獲取資料

14begin

15update

table1 

setname

=name+'

1'16whereid=

@id--

進行相應處理(跟據需要填入sql文)

1718

fetch

next

from

cursor1 

into

@id,

@name

--將游標向下移1行

19end

2021

close

cursor1                   

--關閉游標

22deallocate

cursor1 

複製**

游標一般格式:

declare

游標名稱

cursor for select

欄位1,

欄位2,

欄位3,... from

表名where ...

open

游標名稱

fetch next from

游標名稱

into

變數名1,

變數名2,

變數名3,...

while @@fetch_status=0

begin

sql語句執行過程

... ...

fetch next from

游標名稱

into

變數名1,

變數名2,

變數名3,...

endclose

游標名稱

deallocate

游標名稱 (刪除游標)

例子:/**/

create

table

#temp1(deptid 

int,userid 

int,username 

varchar(20

)) --

待測試的資料表

create

table

#temp2(deptid 

int,username 

varchar(20

))                

--結果表

--先把一些待測試的資料插入到待測試表#temp1中

insert

into

#temp1

select1,

100,'a

'union

allselect1,

101,'b

'union

allselect1,

131,'d

'union

allselect1,

201,'f

'union

allselect2,

302,'c

'union

allselect2,

202,'a

'union

allselect2,

221,'e

'union

allselect3,

102,'y

'union

allselect3,

302,'e

'union

allselect3,

121,'t

'--declare

@deptid

int,

@username

varchar(20

)--定義游標

declare

select_cursor 

cursor

forselect

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 

setusername

=username 

+@username

where

deptid

=@deptid

else

--插入新資料

insert

into

#temp2 

select

@deptid

,@username

fetch

next

from

select_cursor 

into

@deptid

,@username

endclose

select_cursor      

deallocate

select_cursor

select

*from

#temp2 

--測試結果

drop

table

#temp1,#temp2

複製**

SQL Cursor 基本用法

由於這個游標 執行一下就相當於select一下 其效率不敢恭維也沒做深入研究。table1結構如下 2 id int3 name varchar 50 4 5 declare idint 6 declare name varchar 50 7 declare cursor1 cursor for 定...

SQL Cursor 基本用法

由於這個游標 執行一下就相當於select一下 其效率不敢恭維也沒做深入研究。table1結構如下 id int name varchar 50 declare id int declare name varchar 50 declare cursor1 cursor for 定義游標cursor1...

SQL Cursor 基本用法

code highlighting produced by actipro codehighlighter freeware 1 table1結構如下 id int name varchar 50 declare idint declare name varchar 50 declare curso...