SQL Server 数据库之游标

游标

  • 1. 游标的概述
  • 2. 游标的优点
  • 3. 游标的类型
    • 3.1. T-SQL 游标
    • 3.2. API 游标
      • 3.2.1. 静态游标
      • 3.2.2. 动态游标
      • 3.2.3. 只进游标
      • 3.2.4. 键集驱动游标
  • 4. 客户端游标

1. 游标的概述

游标是 SQL Server 数据库开辟的一个缓冲区;
在 SQL Server 数据库中,游标是指向一个查询结果集的一个指针,是通过定义语句和一条 SELECT 语句关联的 SQL 语句;
游标的实际上是从一种包括多条数据记录的结果集中每次提取一条记录的机制
游标中包含游标结果集游标位置两项内容,用户能使用游标查看结果集中向前或向后的查询结果,也能将游标定位在任意位置查看结果;
在 SQL Server 中,数据都是通过结果集的方式操作的,并没有描述表中单条记录的表达形式,只能通过 WHERE 子句来对查询结果进行限定,使用游标能弥补了这种操作上的空缺,使得数据在操作过程中更加灵活;

2. 游标的优点

使用 SELECT 语句查询数据时返回的是一个结果集,在程序设计中对数据结果集的处理不是特别的方便和有效;
游标提供了一种从结果集中每次读取一条记录的机制,让程序能够对返回的记录逐行进行处理;
游标必须与 SQL 选择语句关联才能使用,由返回的数据结果集和游标位置;
游标有以下几个优点:

  1. 使用游标能对 SELECT 返回数据集中的每一条数据做相同或不同的操作,而非对数据集中的所有数据做同一个操作;
  2. 使用游标能对基于游标位置的数据进行更新和删除;
  3. 游标能很好地将数据库与程序连接起来;

3. 游标的类型

游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定的记录的游标位置组成;
SQL server 数据库中支持以下3种类型的游标:

3.1. T-SQL 游标

使用 DECLARE CURSOR 语法创建的游标,主要作用于 T-SQL 脚本、存储过程和触发器中,它们使结果集的内容可用于其他 T-SQL 语句;
T-SQL 游标主要用在服务器上,由从客户端发送给服务器 T-SQL 语句或批处理、存储过程、触发器中的 T-SQL 进行管理;
T-SQL 游标不支持提取数据块或多行数据;

3.2. API 游标

API 游标能在 OLE DB、ODBC以及 DB_library 中使用游标函数,主要作用在服务器上;
当客户端程序通过 API 调用游标函数时,SQL Server 的 OLE DB 提供者、DB_library 的动态链接库会将操作请求传递到服务器对 API 游标进行处理;
API 服务器游标包含静态游标、动态游标、只进游标、键集驱动游标 4 种;

3.2.1. 静态游标

静态游标的结果集会将打开游标时建立的结果存储临时表中(静态游标为只读);
静态游标显示的结果集总是和打开游标时一样,静态游标不会对数据库中的修改做出反应,不会对结果集中的列值更改做出反应,也不会显示游标打开后在数据库总新插入记录;
若组成结果集的值被更改,新的数据值也不会再静态游标中显示;
静态游标会显示出打开游标后数据表中删除的记录;

3.2.2. 动态游标

动态游标的特性和静态游标相反,当滚动游标时会动态地反映出结果集中的所有更改内容;
结果集中的数据会随着用户的 INSERT、UPDATE、DELETE 操作而进行改变;

3.2.3. 只进游标

只进游标不能滚动,只能将数据集中的数据从头到位依次提取;由于只进游标无法回滚,当读取过的数据发生更改时游标无法反映,若更改的数据恰好发生在只进游标读取的当前记录行,就能反映出数据的变化;

3.2.4. 键集驱动游标

键集驱动游标同时具备静态游标动态游标的特点;
当打开游标时,游标中的记录行顺序时固定的,键集会随着游标的打开而存储在临时表中;
打开游标后,数据表中插入的新纪录时不可见的,除非重启游标;
对非键集列的数据更改在游标滚动时可见;

4. 客户端游标

客户端游标用于客户机上缓存结果集时使用;
ODBC 和 DB_library 都支持客户端游标;
在客户端游标中,默认结果集用于将整个结果集高速缓存中执行;
客户端游标只能是只进和静态游标,不支持键集驱动游标和动态游标;
T-SQL 游标和 API 游标都是运行在服务器中的,又称为服务器游标;
注意: T-SQL 游标主要用于存储过程、触发器和 T-SQL 脚本中,它们使结果集的内容可用于其他 T-SQL 语句;

你可能感兴趣的:(SQL,server,数据库,游标,游标的类型)