SQL Server 数据库的维护(四)__游标(cursor)

--维护数据库--




--游标(cursor)--

--概述:

注:使用select语句查询结果的结果集是一个整体,如果想每次处理一行或一部分行数据,游标可以提供这种处理机制。可以将游标理解为指针。指针指向哪条记录,哪条记录即是被操作记录。

游标处理结果集的方式:

1)允许定位在结果集的指定位置行。

2)从结果集的当前位置检索一行或一部分行记录。

3)支持对结果集当前位置做数据修改、删除等操作。

--使用游标

注:使用游标定位和操作数据记录的一般步骤为:声明游标、打开游标、抽取数据、关闭游标和释放游标。

--声明游标 (declare … cursor)

注:声明游标跟声明变量相似,用declare命令。

declare 游标名 cursor --declare表示声明游标名,cursor表示游标含义

[forward_only] [scroll] [read_only] [dynamic] --可选项forward_only表示游标为只进游标。可选项read_only定义游标为只读游标。可选项scroll表示可以使用所有抽取数据的选项。可选项dynamic表示游标结果集中的数据可以修改。

for select语句 [for update [of 字段名 [ , ...] ] ] --select语句指能够查询到结果集的查询语句,其中不能包含compute、compute by和into语句。要对结果集中做update修改操作时,可以使用of字段名来指明允许被修改的字段名,如果不使用of指定字段名,则所有字段都修改。

--打开游标

open 游标名 --open命令表示打开。“游标名”必须是已定义的、且没有在使用的游标。刚打开游标,指针指向结果集中第一条记录之前。

全局标量@@error可以判断游标是否打开成功,如果返回0只则说明成功,否则失败。

全局变量@@cursor_rows可以返回被打开的游标中记录个数。

--抽取游标

fetch [first | prior | next | last | absolute {n|@变量} | relative {n|@变量} ] --fetch命令表示抽取数据,一次只能抽取一条记录。

[from] 游标名 [into @变量名 [, ...] ] --[email protected]变量名,...把抽取出的字段值赋值给指定变量,然后使用。

--first命令用来抽取结果集中的第一条记录,并定位指针。

--prior命令用来抽取当前记录的前一条记录,并定位指针。如果当前记录为结果集中的第一条记录,prior命令则使指针上移至第一条记录上方,并不会抽取结果。

--next命令用来抽取当前记录的后一条记录,并定位指针。新打开的数据库使用next抽取出结果集中第一行记录。如果结果集中最后一行记录为当前记录,next则使指针指向最后一条记录下方,并不会抽取出结果。

--last命令用来抽取结果集中的最后一条记录,并定位指针。

--absolute {n|@变量},当n(或@变量)为正数时,返回结果集中从头开始的第n(或@变量)条记录,并定位指针;当n(或@变量)为负数时,返回结果集中从末尾开始的第n(或@变量)条记录,并定位指针。

--relative {n|@变量},当n(或@变量)为正数时,返回结果集中从当前行开始向下的第n(或@变量)条记录,并定位指针;当n(或@变量)为负数时,返回结果集中从末尾开始的第n(或@变量)条记录,并定位指针。

--可以使用全局变量@@fetch_status的值来判断fetch命令是否抽取到数据。值为0表示抽取到记录值为-1表示指针指向结果集最后一条记录下方值为-2表示抽取操作存在问题

--关闭游标

close 游标名 --游标关闭后不能使用fetch命令抽取游标中的记录,除非再次使用open命令(打开)重新打开。

--释放游标

deallocate 游标名 --被释放后的游标不能再使用open命令打开使用,除非使用declare命令(声明)重新定义。

例:(***下面是一个帮助理解的案例***)(逐条查看“商品管理数据库”的“销售信息表”中2012年12月20日的销售信息)

use 商品管理数据库

go

set nocount on

--声明游标

declare c_销售表_日期 cursor

for

select 商品信息表.商品编号,商品信息表.商品名称,销售金额 from 商品信息表,销售信息表 where 商品信息表.商品编号=销售信息表.商品编号

and 销售日期=‘2012-12-20‘

--打开游标

open c_销售表_日期

--抽取数据

begin

print ‘=====2012年12月20日销售信息=====‘

declare @pdno nchar(8),@pdname nvarchar(10), @salemoney decimal(17,2)

--抽取第一条记录,并将抽取到的变量赋值给相应变量

fetch next from c_销售表_日期 into @pdno,@pdname,@salemoney

--使用全局变量@@fetch_status值是否为0作为循环判断条件,检验是否抽取到记录,如抽取到就在循环体内输出抽取到的值,

--再继续使用fetch命令抽取数据,直到@@FETCH_STATUS的值不为0为止

while(@@FETCH_STATUS=0)

begin

print ‘商品编号:‘+@pdno+‘ 商品名称:‘+@pdname+‘ 销售金额:‘+convert(nchar(25),@salemoney)

fetch next from c_销售表_日期 into @pdno,@pdname,@salemoney

end

end

--关闭游标

close c_销售表_日期

--释放游标

deallocate c_销售表_日期

set nocount off

go

理解例子



注:"--"可看成说明或者注释文本

时间: 2024-12-23 04:20:04

SQL Server 数据库的维护(四)__游标(cursor)的相关文章

SQL Server 数据库的维护(二)__触发器

--维护数据库----触发器-- --概述:注:触发器是一种特殊类型的存储过程,用来强制执行业务规则.在调用执上,触发器不能像存储过程那样可以由用户通过T-SQL语句直接调用,而是需要有数据库所发生的insert.update.delete事件的执行来激发触发器的自动执行.因此在创建和使用触发器时,需要考虑好触发事件的执行和被触发事件后,再设计和创建触发器,已完成用户需求.触发器可以向约束一样,在数据表和视图中的数据发生改变时强制执行业务规则.在某种角度上,触发器要优于约束,因为触发器可以包含使

SQL Server 数据库的维护(三)__事务(transaction)和锁

--锁 注:SQL Server中的锁用来控制一个事务与另一个事务并发性.系统会自动为被访问的资源设置或释放锁.如果某个事务以锁定一个资源,而另一个事务要访问该资源,那么SQL Server会根据第一个事务所使用的锁模式的兼容性来确定是否授予第二个锁. 资源的锁定模式可分为 意向共享(IS).共享(S).更新(U).意向排他(IX).意向排他共享(SIX)和排他(X)六种模式. 死锁现象:在多个任务中,如果一个任务锁定了其他任务试图锁定的资源,此时会造成任务的永久阻塞,从而出现死锁现象. ---

SQL Server 数据库的维护(上)_存储过程(procedure)

--维护数据库----存储过程(procedure)----概述: SQl Serve的存储过程是由一个或多个T-SQL语句组成的一个集合.常用的程序代码段通常被创建成存储过程,一次创建多次调用,这样既简化程序员的工作也减少与服务器交互的网络通信流量.存储过程中可以包含数据库中执行操作的程序语句,也包括调用其他过程.存储过程可以接收和输出参数,向调用它的程序返回值.存储过程被调用后,会返回给调用它的程序状态值,以表明调用成功或者调用失败以及调用失败的原因.--使用存储过程的优点:1)减少网络流量

【2017-03-09】SQL Server 数据库基础、四种约束

一.数据库和内存的区别 数据库:一些存储在硬盘上的数据文件 内存:计算机临时存储的一些数据 二.常用数据库 .Net - SQL Server PHP - MySql Java - Oreacl 三.SQL Server使用方法 1.新建数据库 右键点击"数据库",点击"新建数据库".在弹出的页面中给新建数据库起名字,点击确认. 2.新建表 找到新建的数据库,右键点击新建数据库中的"表",点击"新建表".编辑列名,数据类型 数

sql server 数据库的管理以及维护

   http://xiaorenwutest.blog.51cto.com                 数据库和表的管理 前言:上次主要介绍的是sql server数据库的搭建以及通过SSMS工具进行连接数据库,本次内容主要介绍数据库的表进行管理.在工作中DBA通常对数据库进行创建和删除以及修改表的内容,扩展和收缩.分离及附加. 表是存放数据.查找数据以及更新数据的基本数据构建,在对数据的操作都是在表的基础上进行的,以及如何维护表.   注:实际上表是逻辑的存在,事实上数据存放在硬盘上面.

50种方法优化SQL Server数据库查询(转载)

原文地址:http://www.cnblogs.com/zhycyq/articles/2636748.html 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用

提高SQL Server数据库效率常用方法

1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 9.返回了不必要的行和列 10.查询语句不好,没有优化 ●可以通过如下方法来优化查询 : 1.把数据.日志.索引放到不同的

转载 50种方法优化SQL Server数据库查询

原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷

5、SQL Server数据库

SQL Server数据库基础 一.安装SQL Server数据库 setup.exe->安装->全新SQL Server独立安装或向现有安装添加功能->输入序列号->下一步->默认实例->混合模式->输入sa密码->实例账号添加当前账号即可. 如果想要其他机器访问这台机器的sqlserver,需要使用windows防火墙中的入站规则,端口写1433. 二.SQL Server配置管理器 包含各个sql服务,连接数据库时,务必保证sql server服务已开