最近一段时间做项目写的T-Sql代码老是用到游标(Cursor),所以就研究研究它的用法。这真是不看不知道,一看吓一跳。闲话少说,下面我们来说说Cursor的用法。
这是MSDN中Cursor的定义语句:
DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR
|
最近一段时间做项目写的T-Sql代码老是用到游标(Cursor),所以就研究研究它的用法。这真是不看不知道,一看吓一跳。闲话少说,下面我们来说说Cursor的用法。
这是MSDN中Cursor的定义语句:
create table #table( Id int, Name nvarchar(512))
|
通过上面的代码可以很快的学到如何定义以及使用一个游标,另外需要注意的是使用完的游标一定要关闭(close)并且释放(deallocate)。
上面是对游标使用的简单了解,但是本文的真正目的不是这个。下面要说的才是重点。
SqlServer中我们对查询等语句的定位是面向集合的,即操作某一集合内的数据。但是Cursor却并非如此,它的操作对象是面对某一条(行)数据的。这样就在性能上就会显得Cursor更加的占内存、占代码空间、锁定资源…… 当然这些弊端要在Cursor操作足够条数据多的时候才会显现出来。
所以总体来说还是少用Cursor的好。但是当我们穷尽了while循环,子查询,临时表,表变量,自建函数或其他方式仍然无法实现某些查询的时候,使用游标实现是必不可少的方法。