第三章 t-sql程序设计基础 游标
游标的引入
声明游标 declare
open游标
从一个游标中fetch信息
close或deallocate游标
1>声明游标
declare 游标名称 cursor [local | global ] [ forward_only | scroll] [read_only ] for 选择语句 [ for [ update [ of 字段名称1,字段名称2,....] ]
其中local | global 指定该游标的作用域是局部的还是全局的
如果写forward_only,则游标只能从第一行滚动到最后一行
2>打开游标
游标在声明之后,如果要从游标中读取数据,必须打开游标.打开一个游标使用open命令
语法 open 游标名称
注意:在打开游标时,如果游标声明语句中使用了insensitive保留字,则open产生一个临时表来存放结果集.如果在结果集中任何一行数据的大小超过了sql server定义的最大行尺寸时,open命令将失败
insensitive 表名sql server会将游标定义所选取出来的记录存放在一个临时表内,(建立在tempdb数据库下)对该游标的读取操作皆由临时表来应答.因此,对基本表的修改并不影响游标提取的数据,即游标不会随着基本表内容的改变而改变,同时,也无法通过游标来更新基本表.如果不使用保留字,那么对基本表的更新,删除都会反应到游标中.
3>读取游标中的数据 fetch
格式 fetch [ [ next | prior | first | last | absolute { n | @ nvar } | relative { n | @nvar } ] from ] cursor_name [ into @variable_name1,@variable_name2...]
例子 :更新authors表中的au_lname和au_fname列
declare authors_cur scroll cursor for select * from authors.for update of au_lname,au_fname
update authors
set au_lname='china',au_fname='asia' where current of authors_cur
关闭游标
使用close命令关闭游标
在处理完游标中数据之后,必须关闭游标来释放数据结果集和定位于数据记录上的锁
close语句关闭游标但不释放游标占用的数据结构.如果准备在随后的使用中再次打开游标,则应使用open命令
语法 close 游标名称