Cursor 指標
定位到結果集中某一行
- 靜態指標
Static:在操作指標的時候,數據發生變化,指標中的數據不變。 - 動態指標
Dynamic:在操作指標的時候,數據發生變化,指標中的數據改變,默認值。 - 鍵集驅動指標
KeySet:在操作指標的時候,被標識的列發生變化,指標中的數據改變,其他列改變,指標中數據不變。(只有部分數據變化)
建立指標是用declare
建立測試資料
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create table Member
(
MemberId int primary key identity(1,1),
MemberAccount nvarchar(20) unique check(len(MemberAccount)between 6 and 12),
MemberPwd nvarchar(20),
MemberNikename nvarchar(20),
MemberPhone nvarchar(20)
)
insert into Member(MemberAccount,MemberPwd,MemberNikename,MemberPhone)
values('keeeen',123456,'Ken','12121212'),
('luuuuu',123456,'Luuu','232323223'),
('beeennn',123456,'Ben','343434342'),
('cocoooo',123456,'Coco','454545433'),
('deeeeee',123456,'Deiei','565656544'),
('eeevvvv',123456,'Evvi','676766755')
select * from Member
創建指標 declare
建立指標是用declare declare 指標名稱 cursor scroll
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
--創建指標(scroll: 滾動指標,沒有scroll只能進)
declare mycur cursor scroll--建立mycur指標
for select MemberAccount from Memeber--指標在Memeber上的MemberAccount移動
--打開指標
open mycur
--提取某行數據
fetch first from mycur --第一行
fetch last from mycur --最後一行
fetch absolute 2 from mycur --第二行
fetch relative 2 from mycur --當前行下移2行
fetch next from mycur --下移一行
fetch prior from mycur --上移一行
--範例:提取指標數據存入變量,再進行查詢列的信息
declare @acc varchar(20)
fetch absolute 2 from mycur into @acc --第二行
select * from Member where MemberAccount = @acc
--範例:遍歷指標
declare @acc varchar(20)
fetch absolute 1 from mycur into @acc--指標停在第一行, 內容放到@acc裡去
--@@fetch_status:0提取成功,-1失敗,-2不存在
while @@fetch_status = 0
begin
print '提取成功:'+ @acc
fetch next from mycur into @acc
end
--範例:利用指標進行數據的修改和刪除
select * from Member
fetch absolute 2 from mycur --指標停在第二行
update Member set MemberPwd = '654321' where current of mycur--修改密碼(指標停在哪一行,就修改那一行)
--範例:刪除數據
fetch absolute 2 from mycur
delete from Member where current of mycur
--關閉指標
close mycur
--刪除指標
deallocate mycur
範列:指向單列指標(while)
顯示一個欄位
1
2
3
4
5
6
7
8
9
--範例:遍歷指標
declare @acc varchar(20)
fetch absolute 1 from mycur into @acc--指標停在第一行, 內容放到@acc裡去
--@@fetch_status:0提取成功,-1失敗,-2不存在
while @@fetch_status = 0
begin
print '提取成功:'+ @acc
fetch next from mycur into @acc
end
範列:指向多列指標(while)
創建指向某行多列的指標,循環顯示多列數據。(顯示多個欄位)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
--範列:創建指向某行多列的指標,循環顯示多列數據
declare mycur cursor scroll--建立mycur指標
for select MemberAccount,MemberPwd,MemberNikename from Member--指標在Memeber上的三個欄位移動
--打開指標
open mycur
--遍歷指標
declare @acc varchar(20)
declare @pwd varchar(20)
declare @nickname varchar(20)
fetch absolute 1 from mycur into @acc,@pwd,@nickname--指標停在第一行, 內容放到三個變數裡去
--@@fetch_status:0提取成功,-1失敗,-2不存在
while @@fetch_status = 0
begin
print'用戶名:'+ @acc +',密碼:'+ @pwd+'暱稱:'+ @nickname
fetch next from mycur into @acc,@pwd,@nickname
end
--關閉指標
close mycur
--刪除指標
deallocate mycur