SQLServer技术(82)

来源:互联网 发布:视频直播录制软件 编辑:程序博客网 时间:2024/04/30 08:04
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
每一个游标必须有四个组成部分这四个关键部分必须符合下面的顺序;
1.DECLARE游标
2.OPEN游标
3.从一个游标中FETCH信息
4.CLOSE或DEALLOCATE游标
通常我们使用DECLARE来声明一个游标声明一个游标主要包括以下主要内容:游标名字数据来源(表和列)选取条件属性(仅读或可修改)
其语法格式如下:
DECLAREcursor_name[INSENSITIVE][SCROLL]CURSOR
FORselect_statement
[FOR{READONLY|UPDATE[OFcolumn_name[,...n]]}]
其中:cursor_name
指游标的名字。INSENSITIVE
表明MSSQLServer会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb数据库下)。对该游标的读取操作皆由临时表来应答。因此,对基本表的修改并不影响游标提取的数据,即游标不会随着基本表内容的改变而改变,同时也无法通过
游标来更新基本表。如果不使用该保留字,那么对基本表的更新、删除都会反映到游标中。

另外应该指出,当遇到以下情况发生时,游标将自动设定INSENSITIVE选项。
在SELECT语句中使用DISTINCT、GROUPBY、HAVINGUNION语句;
使用OUTERJOIN;
所选取的任意表没有索引;
将实数值当作选取的列。SCROLL
表明所有的提取操作(如FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)都可用。如果不使用该保留字,那么只能进行NEXT提取操作。由此可见,SCROLL极大地增加了提取数据的灵活性,可以随意读取结果集中的任一行数据记录,而不必关闭再
重开游标。select_statement
是定义结果集的SELECT语句。应该注意的是,在游标中不能使用COMPUTE、COMPU-TEBY、FORBROWSE、INTO语句。READONLY
表明不允许游标内的数据被更新尽管在缺省状态下游标是允许更新的。而且在UPDATE或DELETE语句的WHERECURRENTOF子句中,不允许对该游标进行引用。UPDATE[OFcolumn_name[,…n]]
定义在游标中可被修改的列,如果不指出要更新的列,那么所有的列都将被更新。当游标被成功创建后,游标名成为该游标的惟一标识,如果在以后的存储过程、触发器或Transact_SQL脚本中使用游标,必须指定该游标的名字。
上面介绍的是SQL_92的游标语法规则。下面介绍MSSQLServer提供的扩展了的游标声明语法,通过增加另外的保留字,使游标的功能进一步得到了增强其语法规则为;
LOCAL
定义游标的作用域仅限在其所在的存储过程、触发器或批处理中。当建立游标的存储过程执行结束后,游标会被自动释放。因此,我们常在存储过程中使用OUTPUT保留字,将游标传递给该存储过程的调用者,这样在存储过程执行结束后,可以引用该游标变量,在该种情况下,直到引用该游标的最后一个就是被释放时,游标才会自动释放。GLOBAL
定义游标的作用域是整个会话层会话层指用户的连接时间它包括从用户登录到SQLServer到脱离数据库的整段时间。选择GLOBAL表明在整个会话层的任何存储过程、触发器或批处理中都可以使用该游标,只有当用户脱离数据库、时该游标才会被自动释放。
注意:如果既未使用GLOBAL也未使用LOCAL,那么SQLServer将使用defaultlocalcursor数据库选项,为了与以彰的版本歉容,该选项常设置为FALSE。FORWARD_ONLY
选项指明在从游标中提取数据记录时,只能按照从第一行到最后一行的顺序,此时只能选用FETCHNEXT操作。除非使用STATIC,KEYSET和DYNAMIC关键字,否则如果未指明是使用FORWARD_ONLY还是使用SCROLL,那么FORWARD_ONLY将成为缺省选项,因为若使用STATICKEYSET和DYNAMIC关键字,则变成了SCROLL游标。另外如果使用了FORWARD_ONLY,便不能使用FAST_FORWARD。STATIC
选项的含义与INSENSITIVE选项一样,MSSQLServer会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb数1
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>