博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
游标的简单理解
阅读量:7153 次
发布时间:2019-06-29

本文共 1758 字,大约阅读时间需要 5 分钟。

游标:游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL 选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。

声明游标:

--先看SCROLL,游标的语句格式如下

语句格式为:

DECLARE 游标名称 [INSENSITIVE] [SCROLL]
CURSOR FOR select
语句
[FOR{READ ONLY|UPDATE[OF
列名字表]}]

这里用的SCROOL,不作深究,

        INSENSITIVE

  定义一个游标,以创建将由该游标使用的数据的临时复本。对游标的所有请求都从 tempdb 中的该临时表中得到应答;
  因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改。使用 SQL-92 语法时,
  如果省略 INSENSITIVE,(任何用户)对基表提交的删除和更新都反映在后面的提取中。
   SCROLL
  指定所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)均可用。
  如果在 SQL-92 DECLARE CURSOR 中未指定 SCROLL,则 NEXT 是唯一支持的提取选项。
  如果指定 SCROLL,则不能也指定 FAST_FORWARD CURSOR固定语法

DECLARE curTmpTaskCursor SCROLL CURSOR FOR

                            (

                                               SELECT

                                               DprojectName,

                                               DDemolitionName,

                                               DPlacementArea                       

                                               FROM @pt_tbDemolition

                            )

--打开游标

                            OPEN curTmpTaskCursor

--@@CURSOR判断当前打开的游标中符合条件的行的数目是否大于0,成立就执行下面的语句

                            IF @@CURSOR_ROWS > 0

                            BEGIN

--简单理解一下FETCH:

--FETCH FIRST:提取游标的第一行。

--FETCH NEXT:提取上次提取的行的下一行。
--FETCH PRIOR:提取上次提取的行的前一行。
--FETCH LAST:提取游标中的最后一行。
--FETCH ABSOLUTE n:
-- 如果n 为正整数,则提取 游标中的第n行
-- 如果n为负整数,则提取游标最后一行之前的第n行
-- 如果n 为0,则不提取任何行
--FETCH RELATIVE n :
-- 如果n为正,则提取上次提取的行之后的第n行。
-- 如果n为负,则提取上提取的行之前的第n行。
-- 如果n为0,则再次提取同一行

这里的FETCH NEXT就是提取下一行

                                     FETCH NEXT FROM  curTmpTaskCursor INTO      

                                     @pt_ProjectName ,

                                     @pt_DemolitionName ,

                                     @pt_PlacementArea

                                     WHILE @@FETCH_STATUS = 0

                                     BEGIN

                                     --计算每个拆迁户有多少房子

                                               if @pt_PlacementArea is null

                                               begin

                                               set @pt_SmallHouse=0

                                               set @pt_MiddleHouse=0

                                               set @pt_BigHosue=0

                                               end

                                               .

                                               .

                                               .

                                               .

                                               [语句自由发挥]

                                               FETCH NEXT FROM  curTmpTaskCursor INTO

                                               @pt_ProjectName ,

                                               @pt_DemolitionName ,

                                               @pt_PlacementArea                                  

                                     END

                            END

--关闭游标               

                   CLOSE curTmpTaskCursor

--删除游标语句

                   DEALLOCATE curTmpTaskCursor

 

参考:

           http://www.cnblogs.com/qiaojun/articles/1486365.html

转载于:https://www.cnblogs.com/howie/archive/2012/06/15/2550801.html

你可能感兴趣的文章
原生JS实现最简单的图片懒加载
查看>>
文本分类中的一些小问题
查看>>
【后知后觉系列】css position: sticky 属性以及某些场景的使用
查看>>
基于Flutter Canvas的飞机大战(二)
查看>>
为什么局部下降最快的方向就是梯度的负方向?
查看>>
深入理解 Redux 中间件
查看>>
Quick BI 支持多种数据源进行多维分析
查看>>
[NGX]使用ViewContainerRef来操作Angular中的DOM
查看>>
Java基础-Object类中的方法
查看>>
Zany-灵活的AVPlayer
查看>>
滴滴工程师带你深入理解 TCP 握手分手全过程
查看>>
java B2B2C Springcloud仿淘宝电子商城系统- Zuul过滤器返回值拦截
查看>>
Android FrameWork学习(一)Android 7 0系统源码下载 编译
查看>>
编程新手:看懂很多示例,却依然写不好一个程序
查看>>
Anroid Wear OS 手表应用开发 - UI
查看>>
kotlin开发经验谈5
查看>>
hadoop(10)--MR运行模式以及Yarn的调度流程
查看>>
UWP 开发初阶 Chapter 13 - ScrollViewer 与 Image 两个 XAML 控件的使用与介绍
查看>>
iOS开发者个人账号升级为公司账号。以及修改开发商公司名为中文
查看>>
DOM2级的変动事件DOMSubtreeModified,DOMNodeInserted,DOMNodeRemoved,DOMNodeInsertedIntoD
查看>>