由键集驱动的游标(数据库引擎)

打开由键集驱动的游标时,该游标中各行的成员身份和顺序是固定的。由键集驱动的游标由一组唯一标识符(键)控制,这组键称为键集。键是根据以唯一方式标识结果集中各行的一组列生成的。键集是打开游标时来自符合 SELECT 语句要求的所有行中的一组键值。由键集驱动的游标对应的键集是打开该游标时在 tempdb 中生成的。

当用户滚动游标时,对非键集列中的数据值所做的更改(由游标所有者做出或由其他用户提交)是可见的。在游标外对数据库所做的插入在游标内不可见,除非关闭并重新打开游标。使用 API 函数(例如 ODBC SQLSetPos 函数)通过游标所做的插入在游标的末尾可见。如果试图提取打开游标后已删除的行,@@FETCH_STATUS 将返回“缺少行”状态。对键列进行更新与删除旧键值然后插入新键值作用相同。如果未通过游标进行更新,则新键值不可见;如果使用 API 函数(例如 SQLSetPos)或 Transact-SQL WHERE CURRENT OF 子句通过游标进行更新,并且 SELECT 语句的 FROM 子句中不包含 JOIN 条件,则新键值在游标的末尾可见。如果插入时在 FROM 子句中包含远程表,则新键值不可见。尝试检索旧键值将像检索已删除的行时一样获得“缺少行”提取状态。

ms179409.note(zh-cn,SQL.90).gif注意:
在远程表上声明由键集驱动的游标时,不能使用对计算列编制的索引。可以另外创建一个索引来为该远程表提供唯一键。