SQL Server遍歷表中記錄的2種方法

2021-09-23 20:06:44 字數 3429 閱讀 2979

sql server遍歷表一般都要用到游標,sql server中可以很容易的用游標實現迴圈,實現sql server遍歷表中記錄。本文將介紹利用使用表變數和游標實現資料庫中表的遍歷。

以下**中,**塊之間的差異已經用灰色的背景標記。

1

declare

@temp

table23

(45[

id]intidentity(1, 1

) ,67[

name

]varchar(10)8

9)

1011

declare

@tempid

int,

1213

@tempname

varchar(10

) 14

15insert

into

@temp

1617

values ( 'a'

) 18

19insert

into

@temp

2021

values ( 'b'

) 22

23insert

into

@temp

2425

values ( 'c'

) 26

27insert

into

@temp

2829

values ( 'd'

) 30

31insert

into

@temp

3233

values ( 'e'

) 34

35while

exists ( select[id

]3637from

@temp)38

39begin

4041

setrowcount142

43select

@tempid=[

id],44

45@tempname=[

name]46

47from

@temp

4849

setrowcount0

5051

--delete from @temp where [id] = @tempid

5253

print

'name:----'+

@tempname

5455

end

但是這種方法,必須借助rowcount。但是使用set rowcount 將可能會影響 delete、insert 和 update 語句。

所以修改上面while迴圈,改用top來選出首條記錄。

1

while

exists ( select[id

]23from

@temp)4

5begin67

select

top189

@tempid=[

id],10

11@tempname=[

name]12

13from

@temp

1415

delete

from

@temp

1617

where[id

]=@tempid

1819

select*20

21from

@temp

2223

2425

exec('

drop table '+

)2627print

'name:----'+

@tempname

2829

end

這種方法也存在乙個問題,需要將遍歷過的行刪除,事實上,我們在實際應用中可能並不想要遍歷完一行就刪除一行。

游標是非常**的一種存在,使用游標經常會比使用面向集合的方法慢2-3倍,當游標定義在大資料量時,這個比例還會增加。如果可能,盡量使用while,子查詢,臨時表,函式,表變數等來替代游標,記住,游標永遠只是你最後無奈之下的選擇,而不是首選。

1

--定義表變數23

declare

@temp

table45

(67[

id]intidentity(1, 1

) ,89[

name

]varchar(10)10

11)

1213

declare

@tempid

int,

1415

@tempname

varchar(10

) 16

17declare test_cursor cursor local for

1819

select[id

],[name

]from

@temp

2021

--插入資料值

2223

insert

into

@temp

2425

values ( 'a'

) 26

27insert

into

@temp

2829

values ( 'b'

) 30

31insert

into

@temp

3233

values ( 'c'

) 34

35insert

into

@temp

3637

values ( 'd'

) 38

39insert

into

@temp

4041

values ( 'e'

) 42

4344

45--

開啟游標

4647

open

test_cursor

4849

while

@@fetch_status=0

5051

begin

5253

fetch

next

from test_cursor into

@tempid,@tempname

5455

print

'name:----'+

@tempname

5657

end58

59close

test_cursor

6061

deallocate test_cursor

sql server遍歷表中記錄的實現方法

sql server游標的使用

出處:

SQL Server遍歷表的幾種方法

原文 sql server遍歷表的幾種方法 在資料庫開發過程中,我們經常會碰到要遍歷資料表的情形,一提到遍歷表,我們第一印象可能就想到使用游標,使用游標雖然直觀易懂,但是它不符合面向集合操作的原則,而且效能也比面向集合低。當然,從面向集合操作的角度出發,也有兩種方法可以進行遍歷表的操作,總結起來,遍...

SQL Server遍歷表的幾種方法

在資料庫開發過程中,我們經常會碰到要遍歷資料表的情形,一提到遍歷表,我們第一印象可能就想到使用游標,使用游標雖然直觀易懂,但是它不符合面向集合操作的原則,而且效能也比面向集合低。當然,從面向集合操作的角度出發,也有兩種方法可以進行遍歷表的操作,總結起來,遍歷表有下面幾種方法。使用游標 使用表變數 使...

SQL Server遍歷表的幾種方法

閱讀目錄 在資料庫開發過程中,我們經常會碰到要遍歷資料表的情形,一提到遍歷表,我們第一印象可能就想到使用游標,使用游標雖然直觀易懂,但是它不符合面向集合操作的原則,而且效能也比面向集合低。當然,從面向集合操作的角度出發,也有兩種方法可以進行遍歷表的操作,總結起來,遍歷表有下面幾種方法。使用游標 使用...