使用游标步骤:
1、在某个查询的基础上声明游标

--声明游标
declare c_Customers cursor for
select CustCode from Customers where IsShop=1 --查询所有店铺客户的客户编号

下面我们来看游标定义的参数:

LOCAL和GLOBAL二选一
LOCAL意味着游标的生存周期只在批处理或函数或存储过程中可见,而GLOBAL意味着游标对于特定连接作为上下文,全局内有效。如果不指定游标作用域,默认作用域为GLOBAL。例如:

FORWARD_ONLY 和 SCROLL 二选一
FORWARD_ONLY意味着游标只能从数据集开始向数据集结束的方向读取,FETCH NEXT是唯一的选项,而SCROLL支持游标在定义的数据集中向任何方向,或任何位置移动,如下图:

STATIC KEYSET DYNAMIC和FAST_FORWARD四选一
这四个关键字是游标所在数据集所反应的表内数据和游标读取出的数据的关系
STATIC意味着,当游标被建立时,将会创建FOR后面的SELECT语句所包含数据集的副本存入tempdb数据库中,任何对于底层表内数据的更改不会影响到游标的内容.
DYNAMIC是和STATIC完全相反的选项,当底层数据库更改时,游标的内容也随之得到反映,在下一次fetch中,数据内容会随之改变
KEYSET可以理解为介于STATIC和DYNAMIC的折中方案。将游标所在结果集的唯一能确定每一行的主键存入tempdb,当结果集中任何行改变或者删除时,
@@FETCH_STATUS会为-2,KEYSET无法探测新加入的数据
FAST_FORWARD可以理解成FORWARD_ONLY的优化版本.FORWARD_ONLY执行的是静态计划,而FAST_FORWARD是根据情况进行选择采用动态计划还是静态计划,大多数情况下FAST_FORWARD要比FORWARD_ONLY性能略好.

READ_ONLY SCROLL_LOCKS OPTIMISTIC 三选一
READ_ONLY意味着声明的游标只能读取数据,游标不能做任何更新操作
SCROLL_LOCKS是另一种极端,将读入游标的所有数据进行锁定,防止其他程序进行更改,以确保更新的绝对成功
OPTIMISTIC是相对比较好的一个选择,OPTIMISTIC不锁定任何数据,当需要在游标中更新数据时,如果底层表数据更新,则游标内数据更新不成功,如果,底层表数据未更新,则游标内表数据可以更新.

2、打开游标

open c_Customers    --打开游标

注意,当全局游标和局部游标变量重名时,默认会打开局部变量游标
3、从第一个游标记录中把列值提取到指定的变量

declare @custCode nvarchar(20)
--从第一个游标记录中把列值提取到指定的变量
fetch next from c_Customers into @custCode

游标只有支持6种移动选项,分别为到第一行(FIRST),最后一行(LAST),下一行(NEXT),上一行(PRIOR),直接跳到某行(ABSOLUTE(n)),相对于目前跳几行(RELATIVE(n))

--声明游标
declare c_Customers cursor scroll for
select CustCode from Customers --查询所有店铺客户的客户编号
go
open c_Customers --打开游标
declare @custCode nvarchar(20)
--取下一行
fetch next from c_Customers into @custCode
print @custCode
--取最后一行
fetch last from c_Customers into @custCode
print @custCode
--取第一行
fetch first from c_Customers into @custCode
print @custCode
--取上一行
fetch prior from c_Customers into @custCode
print @custCode
--取第三行
fetch absolute 3 from c_Customers into @custCode
print @custCode
--取相对目前来说上一行
fetch relative -1 from c_Customers into @custCode
print @custCode

4、当还没有超出游标最后一行时(@@fetch_status函数的返回值是0),循环遍历游标记录;在每一次遍历中,从当前游标记录中把列值提取到指定的变量,再为当前执行相应的处理

--声明游标
declare c_Customers cursor scroll for
select CustCode from Customers --查询所有店铺客户的客户编号
go
open c_Customers --打开游标
declare @custCode nvarchar(20)
fetch next from c_Customers into @custCode
while @@fetch_status = 0
begin
print @custCode
fetch next from c_Customers into @custCode --从下一个游标记录中把列值提取到指定的变量
end

5、关闭游标

close c_Customers  --关闭游标

6、释放游标

deallocate c_Customers    --释放游标

示例:

--声明游标
declare c_Customers cursor scroll for
select CustCode from Customers --查询所有店铺客户的客户编号
open c_Customers --打开游标
declare @custCode nvarchar(20)
fetch next from c_Customers into @custCode
while @@fetch_status = 0
begin
print @custCode
fetch next from c_Customers into @custCode --从下一个游标记录中把列值提取到指定的变量
end close c_Customers--关闭游标
deallocate c_Customers --释放游标

参考自:http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html

转:SQL Server游标的使用的更多相关文章

  1. SQL Server 游标运用:鼠标轨迹字符串分割

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 游标模板(Cursor Template) 鼠标轨迹字符串分割SQL脚本实现(SQL Code ...

  2. sql server 游标的简单用法

    sql server游标: --定义游标 declare cursor1 cursor for select ID,Name from A --打开游标 open cursor1 declare @i ...

  3. SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总

    SQL Server游标   转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...

  4. SQL Server 游标运用:查看所有数据库所有表大小信息(Sizes of All Tables in All Database)

    原文:SQL Server 游标运用:查看所有数据库所有表大小信息(Sizes of All Tables in All Database) 一.本文所涉及的内容(Contents) 本文所涉及的内容 ...

  5. SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database)

    原文:SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database) 一.本文所涉及的内容(Contents) 本文所涉及的内容(C ...

  6. SQL Server游标(转)

    清晰地介绍了SQL游标,很好的学习资料. 转自 http://www.cnblogs.com/knowledgesea/p/3699851.html 什么是游标 结果集,结果集就是select查询之后 ...

  7. SQL Server游标

    什么是游标 结果集,结果集就是select查询之后返回的所有行数据的集合. 游标则是处理结果集的一种机制吧,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作数据 ...

  8. SQL Server游标【转】

      什么是游标 结果集,结果集就是select查询之后返回的所有行数据的集合. 游标则是处理结果集的一种机制吧,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作 ...

  9. SQL Server 游标

    结果集,结果集就是select查询之后返回的所有行数据的集合. 在关系数据库中,我们对于查询的思考是面向集合的.而游标打破了这一规则,游标使得我们思考方式变为逐行进行. 正常面向集合的思维方式是: 而 ...

  10. SQL SERVER 游标的使用

    首先,关于什么是游标大家可以看看这篇文章,介绍得非常详细!! SQL Server基础之游标 下面是我自己的应用场景-- 有个需求,需要把数据库表里面某一个字段的值设为随机不重复的值. 表是这样的: ...

随机推荐

  1. ios多播委托

    在现实中回调的需求也分两种 一对一的回调. 一对多的回调. 对于一对一的回调,在IOS中使用delegate.block都能实现.而一对多的回调基本就是通知中心了. 假如现在有一个需求,我们以图片下载 ...

  2. 日志监控工具安装:windows上安装elk

    Elasticsearch + Kibana + logstash   for     windows   安装 https://blog.csdn.net/u011781521/article/de ...

  3. 唯美MACD

    上证30 分钟产生背离,60 分钟高位,但并没有背离,若调整,也是30F 级别的.算是上涨途中的歇脚. 1.股票如果非要从MACD 上去判断怎么拿,那么一句话:要大跌,一般都需要背离.所以,没有背离的 ...

  4. 001-快速搭建Spring web应用【springboot 2.0.4】-gradle、springboot的启动过程分析、gradle多模块构建

    一.概述 学习<精通Spring MVC4>书籍笔记 二.笔记 1.快速构建Spring starter web项目几种方式 1>使用Spring Tool Suite生成Start ...

  5. PE破解win2008登录密码

    1.使用PE系统启动计算机. 2.使用cmd命令行程序. 3.备份一下magnify.exe(windows 放大镜程序). copy C:\WINDOWS\system32\magnify.exe ...

  6. react img 被自动转成base64,无法根据当前路径来动态改变值的解决办法

    项目需求,需要根据当前的图片的路径值的来(加或者减)动态改变其值: state定义如下: this.state={ basket01:0+require("../../img/egg/egg ...

  7. Kubernetes总结

    1.Kubernetes简介 在了解Kubernetes之前,我们有必要先简单了解一下传统的运维模式.在传统的项目架构中(单体or微服务),我们一般将项目打包为war或fatJar的方式进行部署. 在 ...

  8. Scala辅助构造器和主构造器

    和java或c++一样,scala也可以有任意多的构造器.不过,scala类有一个构造器比其它所有构造器都更为重要,它就是主构造器.除了主构造器之外,类还可以有任意多的辅助构造器. 有两点需要注意: ...

  9. 基于Apache Spark机器学习的客户流失预测

    流失预测是个重要的业务,通过预测哪些客户可能取消对服务的订阅来最大限度地减少客户流失.虽然最初在电信行业使用,但它已经成为银行,互联网服务提供商,保险公司和其他垂直行业的通用业务. 预测过程是大规模数 ...

  10. [js]js中回调函数

    //回调函数: 把一个函数当参数传给另个函数 /* function f1() { console.log('f1'); } function f2(f) { f(); console.log(1); ...