重要
Windows 的未来版本中将移除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 Microsoft 建议使用驱动程序的游标功能。
使用 SQLFetchScroll 提取数据块后,应用程序可以更新或删除块中的数据。 若要执行定位更新或删除,应用程序:
- 调用 SQLSetPos 将光标置于要更新或删除的行上。 
- 使用以下语法构造定位更新或删除语句: - UPDATE table-name - SET column-identifier = {expression | NULL} - [, 列标识符 = {表达式 | NULL}] - WHERE CURRENT OF cursor-name - DELETE FROM table-name WHERE CURRENT OF cursor-name - 在定位更新语句中构造 SET 子句的最简单方法是对要更新的每个列使用参数标记,并使用 SQLBindParameter 将这些参数绑定到要更新的行集缓冲区。 在这种情况下,参数的 C 数据类型将与行集缓冲区的 C 数据类型相同。 
- 如果当前行将执行定位更新语句,则更新当前行的行集缓冲区。 成功执行定位更新语句后,游标库会将当前行中每列的值复制到其缓存中。 - 注意 - 如果在执行定位更新语句之前应用程序未正确更新行集缓冲区,则执行语句后缓存中的数据将不正确。 
- 使用与游标关联的语句不同的语句执行定位更新或删除语句。 - 注意 - 由游标库构造的 WHERE 子句标识当前行可能无法标识任何行、标识其他行或标识多个行。 有关详细信息,请参阅 构造搜索语句。 
所有定位的更新和删除语句都需要游标名称。 若要指定游标名称,应用程序在打开游标之前调用 SQLSetCursorName 。 若要使用驱动程序生成的游标名称,应用程序在打开游标后调用 SQLGetCursorName 。
游标库执行定位更新或删除语句后,游标库维护的状态数组、行集缓冲区和缓存包含下表中显示的值。
| 使用的语句 | 行状态数组中的值 | 值 行集缓冲区 | 值 缓存缓冲区 | 
|---|---|---|---|
| 定位更新 | SQL_ROW_UPDATED | 新值[1] | 新值[1] | 
| 定位删除 | SQL_ROW_DELETED | 旧值 | 旧值 | 
[1] 应用程序在执行定位更新语句之前,必须更新行集缓冲区中的值;执行定位更新语句后,游标库会将行集缓冲区中的值复制到其缓存中。