当前位置: 首页 > news >正文

SQL Server 2022的游标

《SQL Server 2022从入门到精通(视频教学超值版)》图书介绍-CSDN博客

《SQL Server 2022从入门到精通(视频教学超值版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)

游标是SQL Server 2022的一种数据访问机制,它允许用户访问单独的数据行。用户可以对每一行进行单独处理,从而降低系统开销和潜在的阻隔情况,用户也可以使用这些数据生成SQL代码并立即执行或输出。

12.1.1  游标的概念

游标是一种处理数据的方法,主要用于存储过程、触发器和Transact-SQL脚本中,它们使结果集的内容可用于其他Transact-SQL语句。在查看或处理结果集中的数据时,游标可以提供在结果集中向前或向后浏览数据的功能。类似于C语言中的指针,它可以指向结果集中的任意位置。当要对结果集进行逐行单独处理时,必须声明一个指向该结果集的游标变量。

SQL Server中的数据操作结果都是面向集合的,并没有一种描述表中单一记录的表达形式,除非使用WHERE子句限定查询结果,使用游标可以提供这种功能,并且游标的使用使操作过程更加灵活、高效。

12.1.2  游标的优点

SELECT语句返回的是一个结果集,但有的时候应用程序并不总是能有效地处理整个结果集,游标便提供了这样一种机制,它能从包括多条数据记录的结果集中每次提取一条记录,游标总是与一条SQL选择语句相关联,由结果集和指向特定记录的游标位置组成。使用游标具有以下优点:

(1)允许程序对由SELECT查询语句返回的行集中的每一行执行相同或不同的操作,而不是对整个集合执行同一个操作。

(2)提供对基于游标位置的表中的行进行删除和更新的能力。

(3)游标作为数据库管理系统和应用程序设计之间的桥梁,将两种处理方式连接起来。

12.1.3  游标的分类

SQL Server 2022支持3种游标实现,分别是Transact-SQL游标,应用程序编程接口(API)服务器游标和客户端游标。

1. Transact-SQL游标

Transact-SQL游标基于DECLARE CURSOR语法,主要用于Transact-SQL脚本、存储过程和触发器。Transact-SQL游标在服务器上实现,并由从客户端发送到服务器的Transact-SQL语句管理。它还可能包含在批处理、存储过程或触发器中。

2. 应用程序编程接口(API)服务器游标

应用程序编程接口(API)服务器游标支持OLE DB和ODBC 中的API游标函数,API服务器游标在服务器上实现。每次客户端应用程序调用API游标函数时,SQL Server Native Client OLE DB访问接口或ODBC驱动程序会把请求传输到服务器,以便对API服务器游标进行操作。

3. 客户端游标

客户端游标由SQL Server Native Client ODBC驱动程序和实现ADO API 的DLL在内部实现。客户端游标通过在客户端高速缓存所有结果集中的行来实现。每次客户端应用程序调用API游标函数时,SQL Server Native Client ODBC驱动程序或ADO DLL会对客户端上高速缓存的结果集中的行执行游标操作。

由于Transact-SQL游标和API服务器游标都在服务器上实现,因此它们统称为服务器游标。

ODBC和ADO定义了Microsoft SQL Server支持的4种游标类型,这样就可以为Transact-SQL游标指定4种游标类型。

SQL Server支持的4种API服务器游标类型如下。

1)只进游标

只进游标不支持滚动,它只支持游标从头到尾顺序提取。行只在从数据库中提取出来后才能检索。对所有由当前用户发出或由其他用户提交并影响结果集中的行的 INSERT、UPDATE 和DELETE语句,其结果在这些行从游标中提取时是可见的。

由于游标无法向后滚动,因此在提取行后对数据库中的行进行的大多数更改通过游标均不可见。当值用于确定所修改的结果集(例如更新聚集索引涵盖的列)中行的位置时,修改后的值通过游标可见。

2)静态游标

SQL Server静态游标始终是只读的,其完整结果集在打开游标时建立在tempdb中。静态游标总是按照打开游标时的原样显示结果集。

游标不反映在数据库中所做的任何影响结果集成员身份的更改,也不反映对组成结果集的行的列值所做的更改。静态游标不会显示打开游标以后在数据库中新插入的行,即使这些行符合游标 SELECT语句的搜索条件。如果组成结果集的行被其他用户更新,则新的数据值不会显示在静态游标中。静态游标会显示打开游标以后从数据库中删除的行。静态游标中不反映 UPDATE、INSERT或者DELETE操作(除非关闭游标,然后重新打开),甚至不反映使用打开游标的同一连接所做的修改。

3)由键集驱动的游标

该游标中各行的成员身份和顺序是固定的。由键集驱动的游标由一组唯一标识符(键)控制,这组键称为键集。键是根据以唯一方式标识结果集中各行的一组列生成的。键集是打开游标时来自符合SELECT语句要求的所有行中的一组键值。由键集驱动的游标对应的键集是打开该游标时在tempdb中生成的。

4)动态游标

动态游标与静态游标相对。当滚动游标时,动态游标反映结果集中所做的所有更改。结果集中的行数据值、顺序和成员在每次提取时都会改变。所有用户做的全部UPDATE、INSERT和DELETE语句均通过游标可见。如果使用API函数(如SQLSetPos)或Transact-SQL WHERE CURRENT OF子句通过游标进行更新,它们将立即可见。在游标外部所做的更新直到提交时才可见,除非将游标的事务隔离级别设为未提交读。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 20240813在荣品RK3588S-AHD开发板的预置Android13中挂载ext4格式的256GB的TF卡
  • 【智能家居设备集成】智能家居设备的集成与互联互通
  • Revit二次开发_使用InnoSetup打包插件
  • Vue2.0 项目实战篇\部署篇
  • B3-111-A 小型挂轨式巡检机器人:智能巡检的突破之
  • MyBatis 配置与测试方式
  • 【纯干货级教程】YOLOv7如何添加注意力机制?
  • 排序算法之折半插入排序
  • 算法的学习笔记—打印从 1 到最大的 n 位数
  • SQL Server 2022的索引
  • The Sandbox 游戏制作教程第 4 章|使用装备制作游戏,触发独特互动
  • 信创教育:培养未来科技创新的生力军
  • 八、OpenCVSharp 中图像阈值处理
  • uniapp预览图片uni.previewImage图片放大
  • Redis操作--RedisTemplate(二)StringRedisTemplate
  • 2017前端实习生面试总结
  • angular2开源库收集
  • CODING 缺陷管理功能正式开始公测
  • HTTP中的ETag在移动客户端的应用
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • JS实现简单的MVC模式开发小游戏
  • PAT A1120
  • React组件设计模式(一)
  • use Google search engine
  • vue-router 实现分析
  • 大型网站性能监测、分析与优化常见问题QA
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 前端
  • 日剧·日综资源集合(建议收藏)
  • 通过几道题目学习二叉搜索树
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 主流的CSS水平和垂直居中技术大全
  • 通过调用文摘列表API获取文摘
  • ​secrets --- 生成管理密码的安全随机数​
  • ​浅谈 Linux 中的 core dump 分析方法
  • ​虚拟化系列介绍(十)
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • $$$$GB2312-80区位编码表$$$$
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (3)选择元素——(17)练习(Exercises)
  • (C++哈希表01)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (黑马点评)二、短信登录功能实现
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .axf 转化 .bin文件 的方法
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net 按比例显示图片的缩略图