SQLServer技术(85)
来源:互联网 发布:窦唯官方淘宝店 编辑:程序博客网 时间:2024/04/30 15:58
在处理完游标中数据之后必须关闭游标来释放数据结果集和定位于数据记录上的锁。CLOSE语句关闭游标,但不释放游标占用的数据结构。如果准备在随后的使用中再次打开游标,则应使用CLOSE命令。其关闭游标的语法规则为:
CLOSE{{[GLOBAL]cursor_name}|cursor_variable_name}
2、自动关闭游标
我们已经了解到游标可应用在存储过程、触发器和Transact_SQL脚本中。如果在声明游标与释放游标之间使用了事务结构,则在结束事务时游标会自动关闭。其具体的情况如下所示:
(1)、声明一个游标
(2)、打开游标
(3)、读取游标
(4)、BEGINTRANSATION
(5)、数据处理
(6)、COMMITTRANSATION
(7)、回到步骤3
在这样的应用环境中。当从游标中读取一条数据记录进行以BEGINTRANSATION为开头,COMMITTRANSATION或ROLLBACK为结束的事务处理时,在程序开始运行后,第一行数据能够被正确返回,经由步骤7,程序回到步骤3,读取游标的下一行,此时常会发现游标未打开的错误信息。其原因就在于当一个事务结束时,不管其是以COMMITTRANSATION还是以ROLLBACKTRANSATION结束,MSSQLServer都会自动关闭游标,所以当继续从游标中读取数据时就会造成错误。
解决这种错误的方法就是使用SET命令将CURSOR_CLOSE_ON_COMMIT这一参数设置为OFF状态。其目的就是让游标在事务结束时仍继续保持打开状态,而不会被关闭。使用SET命令的格式为:
SETCURSOR_CLOSE_ON_COMMITOFF
DEALLOCATE{{[GLOBAL]cursor_name}|@cursor_variable_name}
各参数的含义参看13.3打开游标一节。
当使用DEALLOCATE@cursor_variable_name来删除游标时,游标变量并不会被释放,除非超过使用该游标的存储过程、触发器的范围(即游标的作用域)。
首先我们先声明一个游标。
使用SET语句将一游标赋值给游标变量:
将声明游标语句放在游标赋值语句中,如下所示:
例13-5:下面给出一个具体完整的例子,在该例子中我们对DEALLOCATE命令将有更加清晰的了解。
<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>
- SQLServer技术(85)
- SQLServer技术(103)
- SQLServer技术(104)
- SQLServer技术(105)
- SQLServer技术(106)
- SQLServer技术(107)
- SQLServer技术(108)
- SQLServer技术(109)
- SQLServer技术(110)
- SQLServer技术(111)
- SQLServer技术(112)
- SQLServer技术(113)
- SQLServer技术(114)
- SQLServer技术(115)
- SQLServer技术(116)
- SQLServer技术(117)
- SQLServer技术(118)
- SQLServer技术(119)
- 讨人喜欢的27个原则
- SQLServer技术(82)
- 080426
- SQLServer技术(83)
- SQLServer技术(84)
- SQLServer技术(85)
- SQLServer技术(86)
- ASP.Net之C#中的异常处理
- SQLServer技术(87)
- PLEAC-Perl 教程 - Pattern Matching (Perl进阶者极力推荐)
- SQLServer技术(88)
- 汉字转拼音的ASP程序[这个也可以测试Dictionary类的效率]
- 如何不定义第三个变量,来交换变量A和B的值?
- SQLServer技术(89)