Home [SQL筆記] Cursor 指標
Post
Cancel

[SQL筆記] Cursor 指標

Cursor 指標

定位到結果集中某一行

  1. 靜態指標Static:在操作指標的時候,數據發生變化,指標中的數據不變。
  2. 動態指標Dynamic:在操作指標的時候,數據發生變化,指標中的數據改變,默認值。
  3. 鍵集驅動指標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

https://www.bilibili.com/video/BV1XV411C7TP?p=26

This post is licensed under CC BY 4.0 by the author.