第三章 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 游标名称

 

posted @ 2010-08-10 15:52  转航  阅读(195)  评论(0编辑  收藏  举报