MS SQL基础教程:游标、游标的优点和种类

本章前半部分提供了在MS SQL SERVER 中应用游标所应具有的有关游标的必要知识和各种语法。从中读者可以了解游标的优点、种类、作用、学会如何定义、打开、存取、关闭、释放游标以及游标的应用。除此之外,在本章的后半部分我们介绍了视图和用户自定义函数,使读者了解视图的众多优点,比如简化操作、提高数据安全性;了解如何创建、管理视图和用户自定义函数;了解如何在存储过程和批处理中调用用户自定义函数等诸多问题。

在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT 语句。但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?游标为我们提供了一种极为优秀的解决方案。

13.1.1 游标和游标的优点

在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条T_SQL 选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。

我们知道关系数据库管理系统实质是面向集合的,在MS SQL SERVER 中并没有一种描述表中单一记录的表达形式,除非使用where 子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。

由此可见,游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。

13.1.2 游标种类

MS SQL SERVER 支持三种类型的游标:Transact_SQL 游标,API 服务器游标和客户游标。

(1) Transact_SQL 游标

Transact_SQL 游标是由DECLARE CURSOR 语法定义、主要用在Transact_SQL 脚本、存储过程和触发器中。Transact_SQL 游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL 语句或是批处理、存储过程、触发器中的Transact_SQL 进行管理。 Transact_SQL 游标不支持提取数据块或多行数据。

(2) API 游标

API 游标支持在OLE DB, ODBC 以及DB_library 中使用游标函数,主要用在服务器上。每一次客户端应用程序调用API 游标函数,MS SQL SEVER 的OLE DB 提供者、ODBC驱动器或DB_library 的动态链接库(DLL) 都会将这些客户请求传送给服务器以对API游标进行处理。

(3) 客户游标

客户游标主要是当在客户机上缓存结果集时才使用。在客户游标中,有一个缺省的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。由于服务器游标并不支持所有的Transact-SQL 语句或批处理,所以客户游标常常仅被用作服务器游标的辅助。因为在一般情况下,服务器游标能支持绝大多数的游标操作。

由于API 游标和Transact-SQL 游标使用在服务器端,所以被称为服务器游标,也被称为后台游标,而客户端游标被称为前台游标。在本章中我们主要讲述服务器(后台)游标。

查看全套"MS SQL入门基础教程"

时间: 2024-10-05 19:35:01

MS SQL基础教程:游标、游标的优点和种类的相关文章

MS SQL基础教程:游标的应用

在前面几节,我们详细介绍了如何声明游标,从游标中读取数据以及关闭.释放游标的方法.下面我们将给出几个应用实例使读者对游标有更为全面的了解. 13.7.1 游标变量的应用 我们已经提到游标是从MS SQL SERVER 7 版本才开始使用的新的变量类型,游标常被应用在存储过程.触发器中.那么游标是如何被作为变量而应用呢?看一下系统过程sp_cursor_list 的SQL 语句文本,会大有收获. 在该存储过程中,@cursor_return 为一游标变量,并将其结果集返回给其调用者,该结果集保存有

MS SQL基础教程:SQL Server安全性管理的途径

当在服务器上运行SQL Server 时,我们总是要想方设法去使SQL Server 免遭非法用户的侵入,拒绝其访问数据库,保证数据的安全性.SQL Server 提供了强大的内置的安全性和数据保护,来帮助实现这种理所当然的要求.从前面的介绍中我们可以看出SQL Server 提供了从操作系统,SQL ServerE, 数据库到对象的多级别的安全保护.其中也涉及到角色.数据库用户.权限等多个与安全性有关的概念.在本书前面我们也暗示过存储过程和触发器在保护数据安全性上不可小视的作用.现在我们面临的

MS SQL基础教程:存储过程概述

在大型数据库系统中,存储过程和触发器具有很重要的作用.无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合.就 本质而言,触发器也是一种存储过程.存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快.SQL Server 2000 不仅提供了用户自定义存储过程的功能,而且也提供了许多可作为工具使用的系统存储过程. 12.1.1 存储过程的概念 存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库.中用户通过指定存储过程的

MS SQL基础教程:用户和安全性管理--SQL Server的登录认证

对任何企业组织来说,数据的安全性最为重要.安全性主要是指允许那些具有相应的数据访问权限的用户能够登录到SQL Server 并访问数据以及对数据库对象实施各种权限范围内的操作,但是要拒绝所有的非授权用户的非法操作.因此,安全性管理与用户管理是密不可分的.SQL Server 2000 提供了内置的安全性和数据保护,并且这种管理有效而又容易. 本章主要讨论如何创建和管理用户账号,以及如何实现和管理安全性,同时包括很多技巧和注意事项,这些技巧和注意事项将使您的工作更轻松,高效. SQL Server

MS SQL基础教程:备份和恢复概述

原理主要是为防止非法登录者或非授权用户对SQL Server 数据库或数据造成破坏,但在有些情况下这种安全管理机制显得力不从心.例如合法用户不小心对数据库数据做了不正确的操作或者保存数据库文件的磁盘遭到损坏或者运行SQL Server 的服务器因某种不可预见的事情而导致崩溃.所以我们需要提出另外的方案即数据库的备份和恢复来解决这种问题.本章的主要目的就是介绍备份.恢复的含义,数据库备份的种类以及备份设备等基本的概念,以及如何创建备份和恢复数据库,使读者对其有全面的了解和认识,能够自主制定自己的备

MS SQL基础教程:系统存储过程

系统存储过程就是系统创建的存储过程,目的在于能够方便地从系统表中查询信息或完成与更新数据库表相关的管理任务或其它的系统管理任务.系统过程以"sp_"_ 为开头,在Master 数据库中创建并保存在该数据库中,为数据库管理者所有.一些系统过程只能由系统管理员使用,而有些系统过程通过授权可以被其它用户所使用. 系统存储过程主要包括以下几类:(这里主要给出每类系统过程中经常使用的系统过程) 查看全套"MS SQL基础教程"

MS SQL基础教程:创建备份设备

在进行备份以前首先必须创建备份设备.备份设备是用来存储数据库.事务日志或文件和文件组备份的存储介质.备份设备可以是硬盘.磁带或管道.SQL Server 只支持将数据库备份到本地磁带机,而不是网络上的远程磁带机.当使用磁盘时,SQL Server 允许将本地主机硬盘和远程主机上的硬盘作为备份设备,备份设备在硬盘中是以文件的方式存储的. 15.2.1 用SQL Server Enterprise Manager 管理备份设备 1 使用SQL Server Enterprise Manager 创建

MS SQL基础教程:备份向导

我们知道备份和恢复数据库是DBA 的主要工作,但是如果您是一名DBA 新手,我们建议您在没有搞清楚到底如何进行之前,不妨使用备份向导.它能告诉您在备份时应该干些什么使用备份向导的步骤如下: (1) 启动SQL Server Enterprise Manager, 单击要登录的服务器,此时在主菜单上选择Tools, 在弹出菜单上选择Wizards 后弹出Select Wizard 对话框,如图15-7 所示. 图15-7 Select Wizard 对话框 (2) 单击Management 左边的

MS SQL基础教程:备份和恢复系统数据库

系统数据库保存了有关SQL Server 的许多重要数据信息,这些数据的丢失将给系统带来极为严重的后果,所以我们也必须对系统数据库进行备份.这样一旦系统或数据库失败,则可以通过恢复来重建系统数据库.在SQL Server 中重要的系统数据库主要有master. msdb. distribution. model. 虽然tempdb 也是系统数据库但没有必要对其进行备份,因为SQL Server 每次启动都会重新创建该数据库,而当SQL Server 停止运行时,tempdb 数据库中所有数据都会