This Domain(Admin5.com) is for Sale:

SQLServer数据库实用技术(82)

时间:2007-12-23  来源:不详  作者:迈克DB
每一个游标必须有四个组成部分这四个要害部分必须符合下面的顺序;
1.DECLARE 游标
2.OPEN 游标
3.从一个游标中FETCH 信息
4.CLOSE 或DEALLOCATE 游标
通常我们使用DECLARE 来声明一个游标声明一个游标主要包括以下主要内容:
  • 游标名字
  • 数据来源(表和列)
  • 选取条件
  • 属性(仅读或可修改)
    其语法格式如下:
    DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR
    FOR select_statement
    [FOR {READ ONLY | UPDATE [OF column_name [,...n]]}]
    其中:
  • cursor_name
    指游标的名字。
  • INSENSITIVE
    表明MS SQL SERVER 会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb 数据库下)。对该游标的读取操作皆由临时表来应答。因此,对基本表的修改并不影响游标提取的数据,即游标不会随着基本表内容的改变而改变,同时也无法通过
    游标来更新基本表。假如不使用该保留字,那么对基本表的更新、删除都会反映到游标中。

    另外应该指出,当碰到以下情况发生时,游标将自动设定INSENSITIVE 选项。
    在SELECT 语句中使用DISTINCT、 GROUP BY、 HAVING UNION 语句;
    使用OUTER JOIN;
    所选取的任意表没有索引; 内容来自dedecms
    将实数值当作选取的列。
  • SCROLL
    表明所有的提取操作(如FIRST、 LAST、 PRIOR、 NEXT、 RELATIVE、 ABSOLUTE)都可用。假如不使用该保留字,那么只能进行NEXT 提取操作。由此可见,SCROLL 极大地增加了提取数据的灵活性,可以随意读取结果集中的任一行数据记录,而不必关闭再
    重开游标。
  • select_statement
    是定义结果集的SELECT 语句。应该注重的是,在游标中不能使用COMPUTE、COMPU- TE BY、 FOR BROWSE、 INTO 语句。
  • READ ONLY
    表明不答应游标内的数据被更新尽管在缺省状态下游标是答应更新的。而且在UPDATE或DELETE 语句的WHERE CURRENT OF 子句中,不答应对该游标进行引用。
  • UPDATE [OF column_name[,…n]]
    定义在游标中可被修改的列,假如不指出要更新的列,那么所有的列都将被更新。当游标被成功创建后,游标名成为该游标的惟一标识,假如在以后的存储过程、触发器或Transact_SQL 脚本中使用游标,必须指定该游标的名字。
    上面介绍的是SQL_92 的游标语法规则。下面介绍MS SQL SERVER 提供的扩展了的游标声明语法,通过增加另外的保留字,使游标的功能进一步得到了增强其语法规则为;
  • LOCAL

    织梦内容管理系统


    定义游标的作用域仅限在其所在的存储过程、触发器或批处理中。当建立游标的存储过程执行结束后,游标会被自动释放。因此,我们常在存储过程中使用OUTPUT 保留字,将游标传递给该存储过程的调用者,这样在存储过程执行结束后,可以引用该游标变量,在该种情况下,直到引用该游标的最后一个就是被释放时,游标才会自动释放。
  • GLOBAL
    定义游标的作用域是整个会话层会话层指用户的连接时间它包括从用户登录到SQLSERVER 到脱离数据库的整段时间。选择GLOBAL 表明在整个会话层的任何存储过程、触发器或批处理中都可以使用该游标,只有当用户脱离数据库、时该游标才会被自动释放。
    注重:假如既未使用GLOBAL也未使用LOCAL,那么SQL SERVER将使用default local cursor数据库选项,为了与以彰的版本歉容,该选项常设置为FALSE。
  • FORWARD_ONLY
    选项指明在从游标中提取数据记录时,只能按照从第一行到最后一行的顺序,此时只能选用FETCH NEXT 操作。除非使用STATIC, KEYSET 和DYNAMIC 要害字,否则假如未指明是使用FORWARD_ONLY 还是使用SCROLL, 那么FORWARD_ONLY 将成为缺省选项,因为若使用STATIC KEYSET 和DYNAMIC 要害字,则变成了SCROLL 游标。另外假如使用了FORWARD_ONLY, 便不能使用FAST_FORWARD。

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息