iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >SqlServer系列笔记——游标
  • 864
分享到

SqlServer系列笔记——游标

2024-04-02 19:04:59 864人浏览 独家记忆
摘要

游标的概念游标是一种数据访问机制,是一个在给定结果集中以行为单位访问和操纵数据的数据库对象游标的好处:可以逐行的处理数据允许定位于结果集中的特定的行从当前结果集中获取一行能对结果集的当前行进行修改 

游标的概念

游标是一种数据访问机制,是一个在给定结果集中以行为单位访问和操纵数据的数据库对象

游标的好处:可以逐行的处理数据允许定位于结果集中的特定的行从当前结果集中获取一行

能对结果集的当前行进行修改

 T-sql中的游标定义在MSDN中如下:

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 ] ] ]
[;]
--默认作用域为GLOBAL
--默认 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不锁定任何数据,当需要在游标中更新数据时,如果底层表数据更新,则游标内数据更新不成功,如果,底层表数据未更新,则游标内表数据可以更新

游标的类型

静态游标:adopenstatic不检测数据行的变化

动态游标:adopendynamic反映所有数据行的改变

仅向前游标:adopenforwardonly 不支持滚动

键集游标:adopenstatic能反映修改,但不能准群反映插入、删除

游标的使用顺序

定义游标declare

打开游标open

使用游标fetch

关闭游标close

释放游标deallocate


declare curTest cursor

 scroll for select Title from dbo.Course

open curTest  --打开游标

fetch curTest

declare @Name varchar(50)

fetch first from curTest into @Name

print '课程:'+@Name

while @@FETCH_STATUS=0

begin

fetch next from curTest into @Name

print  '课程:'+@Name 

end


close curTest --关闭游标

deallocate curTest --释放游标


对于游标一些优化建议

  •      如果能不用游标,尽量不要使用游标

  •      用完用完之后一定要关闭和释放

  •      尽量不要在大量数据上定义游标

  •      尽量不要使用游标上更新数据

  •      尽量不要使用insensitive, static和keyset这些参数定义游标

  •      如果可以,尽量使用FAST_FORWARD关键字定义游标

  •      如果只对数据进行读取,当读取时只用到FETCH NEXT选项,则最好使用FORWARD_ONLY参数


您可能感兴趣的文档:

--结束END--

本文标题: SqlServer系列笔记——游标

本文链接: https://www.lsjlt.com/news/42640.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SqlServer系列笔记——case when 语句
    CASE用法CASE            WHEN condition1 THEN returnvalue1 &n...
    99+
    2024-04-02
  • SqlServer系列笔记——流程控制语句
    --if else if 1>0print '大'--begin end结构begin end用途 设定一个程序块,进行批处理if 1>0beginprint '大'end--case...
    99+
    2024-04-02
  • SqlServer系列笔记——用户自定义函数
     用户自定义函数不能用于执行一系列改变数据库状态的操作,但它可以像系统函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过 EXECUTE 命令来执行。    在 SQL ...
    99+
    2024-04-02
  • MongoDB笔记八——游标
    ...
    99+
    2024-04-02
  • Python学习笔记-SQLSERVER
    环境 : python3.6 / win10 / vs2017 / sqlserver2017 一、需要安装的包pymssql pip install pymssql 二、pymssql模块的介绍 pymssql 包 有modules...
    99+
    2023-01-30
    学习笔记 Python SQLSERVER
  • Flutter游戏引擎Flame系列笔记 - 1.Flame引擎概述
    Flutter游戏引擎Flame系列笔记 1.Flame引擎概述 - 文章信息 - Author: 李俊才(jcLee95) Visit me at: https://jclee95....
    99+
    2023-09-08
    游戏引擎 Flame Flutter
  • JSP标记学习笔记 (转)
    JSP标记学习笔记 (转)[@more@]  JSP标记学习笔记XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />ginkou.fl...
    99+
    2023-06-03
  • 什么是SQLServer中的游标
    在SQL Server中,游标是一种用于逐行处理结果集的数据库对象。游标允许用户在结果集中逐行遍历数据,并对每一行数据执行特定操作。...
    99+
    2024-04-09
    SQLServer
  • python学习笔记---列表
    列表属于python序列中的一种,属于可变序列,支持插入、删除和替换操作。1、定义列表:2、列表中元素的操作:    获取索引的元素 l[index]:    删除列表中指定索引的元素 del(l[index]):    修改指定元素l[i...
    99+
    2023-01-31
    学习笔记 列表 python
  • sqlserver如何添加标识列
    在SQL Server中,要添加一个标识列,你需要在创建表的时候指定该列为标识列。你可以使用以下语法来添加一个标识列: CREATE...
    99+
    2024-04-09
    sqlserver
  • sqlserver游标嵌套怎么优化
    在 SQL Server 中,游标嵌套通常会导致性能问题,因为每次迭代游标时都会执行一次查询,导致额外的开销和性能下降。因此,建议尽...
    99+
    2024-04-08
    sqlserver
  • sqlserver游标的用法是什么
    在SQL Server中,游标是一种用于在结果集中遍历数据的数据库对象。游标通常在存储过程或触发器中使用,允许逐行处理结果集中的数据...
    99+
    2024-04-08
    sqlserver
  • sqlserver游标的作用是什么
    SQL Server游标用于在结果集中逐行遍历数据。它允许开发人员在数据集合中操作每一行数据,执行特定的操作或者检查每一行是否符合特...
    99+
    2024-04-08
    sqlserver
  • python_笔记3_list列表(有序
    按照索引访问list list_name = ['zys','vart','sdf'] print list_name[0] print list_name[-1] print list_name[:-1] print list_nam...
    99+
    2023-01-31
    笔记 列表 _list
  • Python 3 学习笔记:序列
    序列 索引 序列是一块用于放置多个值得连续存储空间,并且按特定顺序排列,每个值(称为元素)都分配一个整数(由左至右则从 0 开始;由右至左则从 -1 开始),称为索引(index)或位置,如下所示: 可以根据索引获取每个元素实际的值 st...
    99+
    2023-01-31
    序列 学习笔记 Python
  • 「学习笔记」循环、列表
    while循环与for循环    (一)while循环 结构: while: 循环体    (二)for循环 for 目标 in 表达式: 循环体  实例: favourite = 'fish' for i ...
    99+
    2023-01-30
    学习笔记 列表
  • 笔记本win7系统下载安装鼠标驱动
    又部分用户给笔记本电脑重装系统之后发现鼠标突然就没反应了,这种情况一般只需要我们装上鼠标驱动就能解决,我们可以临时使用笔记本上的触摸面板来操作,下面来看看具体的方法吧。1、电脑用户按“Win+Pause Break”快捷键打开计算机属性界面...
    99+
    2023-07-11
  • sqlserver游标怎么使用和循环
    在 SQL Server 中,游标是一种用于遍历结果集的机制。游标可以让我们逐行地处理结果集中的数据,类似于在程序中使用循环来处理数...
    99+
    2024-04-09
    sqlserver
  • Python标准库笔记(11) — Op
    Operator——标准功能性操作符接口. 代码中使用迭代器时,有时必须要为一个简单表达式创建函数。有些情况这些函数可以用一个lambda函数实现,但是对于某些操作,根本没必要去写一个新的函数。因此operator模块定义了一些函数...
    99+
    2023-01-30
    笔记 标准 Python
  • SQLServer事务,异常和游标详解
    目录事务1、 事务的特点2、 事务的模式3、 事务处理4、 事务的示例异常 错误函数示例:用异常处理错误信息示例:异常能处理的错误信息示例:无法提交的事务示例:处理异常日志...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作