SQL Server游标的使用

在关系数据库中,我们对于查询的思考是面向集合的。而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服。

定义

游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。

优点

1)允许程序对由查询语句select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作。
2)提供对基于游标位置的表中的行进行删除和更新的能力。
3)游标实际上作为面向集合的数据库管理系统(RDBMS)和面向行的程序设计之间的桥梁,使这两种处理方式通过游标沟通起来。

步骤

使用游标对记录集循环进行处理的时候一般操作如以下几个步骤:

  1. 把记录集传给游标;
  2. 打开游标
  3. 开始循环
  4. 从游标中取值
  5. 检查那一行被返回
  6. 处理
  7. 关闭循环
  8. 关闭游标

游标状态变量

@@fetch_status 游标状态

0 成功 -1 失败 -2 丢失

@@cursor_rows 游标中结果集中的行数

n 行数 -1 游标是动态的 0 空集游标

举例

use pubs 
go 
declare @auid char(12),@aulname varchar(20),@aufname varchar(20), @st char(2),@auinfo varchar(50) 
declare auth_cur cursor for 
select au_id, au_lname, au_fname, state from authors 
open auth_cur 
fetch next from auth_cur into @auid,@aulname,@aufname, @st while (@@fetch_status=0)   
begin     
	print '作者编号: '+@auid     
	print '作者姓名: '+@aulname+','+@aufname     
	print '所在州: '+@st     
	print '--------------------------'     
	fetch next from auth_cur into @auid,@aulname,@aufname, @st   
end 
close auth_cur 
deallocate auth_cur
—— 完 ——
相关推荐
评论

立 为 非 似

中 谁 昨 此

宵 风 夜 星

。 露 , 辰

文章点击榜

细 无 轻 自

如 边 似 在

愁 丝 梦 飞

。 雨 , 花