Sqlserver 游标读取固定行数据

今天有人问我,sqlserver里面的游标只能一行一行固定往下读,不能指定某一行来读取吗?

我思考了一下,应该是可以的,我看下了sqlserver 游标,发现他是有一个叫游标方向

下面简单说一下这个游标方向

FORWARD_ONLY

      指定游标只能从第一行滚动到最后一行FETCH NEXT 是唯一支持的提取选项。如果在指定 FORWARD_ONLY 时不指定 STATIC、KEYSET 和 DYNAMIC 关键字,则游标作为 DYNAMIC 游标进行操作。如果 FORWARD_ONLY 和 SCROLL 均未指定,则除非指定 STATIC、KEYSET 或 DYNAMIC 关键字,否则默认为 FORWARD_ONLY。STATIC、KEYSET 和 DYNAMIC 游标默认为 SCROLL。与 ODBC 和 ADO 这类数据库 API 不同,STATIC、KEYSET 和 DYNAMIC Transact-SQL 游标支持 FORWARD_ONLY。

SCROLL

     指定所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)均可用。如果未在 ISO DECLARE CURSOR 中指定 SCROLL,则 NEXT 是唯一支持的提取选项。如果也指定了 FAST_FORWARD,则不能指定 SCROLL。

今天的这个游标固定获取某一行就使用的是SCROLL来实现的,下面看一下实现效果

创建临时表

只获取第一行数据(使用next关键字)

fetch next from stuCur

只获取最后一行数据(使用last关键字) 

fetch last from stuCur

 

 只获取第三行数据(使用absolute关键字)

fetch absolute 3 from stuCur

下面贴上完整的存储过程代码

ALTER PROCEDURE MyScroll

AS
BEGIN
	SET NOCOUNT ON;
	--创建临时表
	create table #Mystudent(
	id int primary key IDENTITY(1,1),
	stuname varchar(50),
	age int
	)
--往临时表中添加数据
insert into #mystudent values('张三①',11)
insert into #mystudent values('张三②',12)
insert into #mystudent values('张三③',13)
insert into #mystudent values('张三④',14)
insert into #mystudent values('张三⑤',15)

--创建游标
declare stuCur cursor scroll
for
select * from #mystudent
go
--打开游标
open stuCur
--读取数据开始
--fetch next from stuCur --读取当前行的下一行,并使其置为当前行(刚开始时游标置于表头的前一行,即若表是从0开始的,游标最初置于-1处,所以第一次读取的是头一行)
--fetch prior from stuCur --读取当前行的前一行,并使其置为当前行
--fetch first from stuCur --读取游标的第一行,并使其置为当前行(不能用于只进游标)
--fetch last from stuCur  --读取游标的最后一行,并使其置为当前行(不能用于只进游标)
fetch absolute 3 from stuCur --读取从游标头开始向后的第2行,并将读取的行作为新的行
--fetch relative 3 from stuCur --读取从当前行开始向后的第3行,并将读取的行作为新的行
--fetch relative-2 from stuCur --读取当前行的上两行,并将读取的行作为新的行
--读取数据结束

 --关闭游标
 close stuCur
 --销毁游标
 deallocate stuCur
 --删除临时表
 drop table #mystudent
END

        我的博客主页                   感谢大家一如既往的支持我,谢谢大家!

 

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迟到的微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值