SqlServer-Cursor讲解一

原创文章,转载必需注明出处:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/introduce-for-sqlserver-s-cursor-1/

最近一段时间做项目写的T-Sql代码老是用到游标(Cursor),所以就研究研究它的用法。这真是不看不知道,一看吓一跳。闲话少说,下面我们来说说Cursor的用法。

这是MSDN中Cursor的定义语句:

DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR 
     FOR select_statement 
     [ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]
[;]
Transact-SQL Extended Syntax
DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ] 
     [ FORWARD_ONLY | SCROLL ] 
     [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] 
     [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] 
     [ TYPE_WARNING ] 
     FOR select_statement 
     [ FOR UPDATE [ OF column_name [ ,...n ] ] ]
[;]

  

上来看见这一堆东西估计你的接着看下去的想法立刻消去一半了,下面贴上正真的定义一个Cursor并且使用它的语句吧:

create table #table( Id int, Name nvarchar(512))
insert into #table values( 1, N'dong')
insert into #table values( 2, N'liu')
 
declare @name nvarchar(512)
declare MyCursor cursor for select Name from #table --定义游标,游标数据集来源临时表#table
open MyCursor --打开游标以供下面代码使用
fetch next from MyCursor into @name --将游标指向的值赋值给临时变量@name,游标指向下一条数据
while @@FETCH_STATUS=0 --判断游标是否到最后一条记录
begin
	select @name
	fetch next from MyCursor into @name
end
close MyCursor --关闭游标
deallocate MyCursor -- 释放最后的游标引用时
drop table #table

  

上面是对游标使用的简单了解,但是本文的真正目的不是这个。下面要说的才是重点。通过上面的代码可以很快的学到如何定义以及使用一个游标,另外需要注意的是使用完的游标一定要关闭(close)并且释放(deallocate)。

SqlServer中我们对查询等语句的定位是面向集合的,即操作某一集合内的数据。但是Cursor却并非如此,它的操作对象是面对某一条(行)数据的。这样就在性能上就会显得Cursor更加的占内存、占代码空间、锁定资源…… 当然这些弊端要在Cursor操作足够条数据多的时候才会显现出来。

所以总体来说还是少用Cursor的好。但是当我们穷尽了while循环,子查询,临时表,表变量,自建函数或其他方式仍然无法实现某些查询的时候,使用游标实现是必不可少的方法。

转载于:https://www.cnblogs.com/lonel-yboy/p/5200458.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值