SQLServer数据库实用技术(82)
时间:2007-12-23 来源:不详 作者:迈克DB
选项的含义与INSENSITIVE 选项一样,MS SQL SERVER 会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb 数据库下)。对该游标的读取操作皆由临时表来应答。因此对基本表的修改并不影响游标中的数据,即游标不会随着基本表内容的
改变而改变,同时也无法通过游标来更新基本表。
指出当游标被打开时,游标中列的顺序是固定的,并且MS SQL SERVER 会在tempdb内建立一个表,该表即为KEYSET KEYSET 的键值可惟一识别游标中的某行数据。当游标拥有者或其它用户对基本表中的非键值数据进行修改时,这种变化能够反映到游标中,所以游标用户或所有者可以通过滚动游标提限这些数据。
当其它用户增加一条新的符合所定义的游标范围的数据时,无法由此游标读到该数据。因为Transact-SQL 服务器游标不支持INSERT 语句。
假如在游标中的某一行被删除掉,那么当通过游标来提取该删除行时,@@FETCH_STATUS 的返回值为-2。 @@FETCH_STATUS 是用来判定读取游标是否成功的系统全局变量。
由于更新操作包括两部分:删除原数据插入新数据,所以假如读取原数据,@@FETCH_STATUS 的返回值为-2; 而且无法通过游标来读取新插入的数据。但是假如使用了WHERE CURRENT OF 子句时,该新插入行数据便是可见的。
copyright dedecms
注重:假如基础表未包含惟一的索引或主键,则一个KEYSET游标将回复成STATIC游标。
指明基础表的变化将反映到游标中,使用这个选项会最大程度上保证数据的一致性。然而,与KEYSET 和STATIC 类型游标相比较,此类型游标需要大量的游标资源。
指明一个FORWARD_ONLY, READ_ONLY 型游标。此选项已为执行进行了优化。假如SCROLL 或FOR_UPDATE 选项被定义,则FAST_FORWARD 选项不能被定义。
指明锁被放置在游标结果集所使用的数据上当。数据被读入游标中时,就会出现锁。这个选项确保对一个游标进行的更新和删除操作总能被成功执行。假如FAST_FORWARD选项被定义,则不能选择该选项。另外,由于数据被游标锁定,所以当考虑到数据并发处理时,应避免使用该选项。
指明在数据被读入游标后,假如游标中某行数据已发生变化,那么对游标数据进行更新或删除可能会导致失败。假如使用了FAST_FORWARD 选项,则不能使用该选项。
指明若游标类型被修改成与用户定义的类型不同时,将发送一个警告信息给客户端。
注重:不可以将SQL_92的游标语法规则与MS SQL SERVER的游标扩展用法混合在一起使用。
织梦好,好织梦
假如在CURSOR 前使用了SCROLL 或INSENSITIVE 保留字,则不能在CURSOR 和FOR select_statement 之间使用任何的保留字。反之同理。
假如用DECLARE CURSOR 声明游标时,没有选择READ_ONLY、 OPTIMISTIC 或SCROLL_LOCKS 选项时,游标的缺省情况为:
假如SELECT 语句不支持更新,则游标为READ_ONLY;
STATIC 和FAST_FORWARD 类型的游标缺省为READ_ONLY;
DYNAMIC 和KEYSET 游标缺省为OPTIMISTIC。
我们仅能在Transact-SQL 语句中引用游标,而不能在数据库API 函数中引用。
游标被声明以后,可以通过系统过程对其特性进行设置。
对那些有权限对视图、表或某些列执行SELECT 语句的用户而言,它也具有使用游标的缺省权限。
文章评论
共有位Admini5网友发表了评论 查看完整内容