执行定位更新和删除语句

重要

Windows 的未来版本中将移除此功能。 避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。 Microsoft 建议使用驱动程序的游标功能。

应用程序使用 SQLFetchScroll 提取数据块后,可以更新或删除块中的数据。 若要执行定位更新或删除,应用程序:

  1. 调用 SQLSetPos 将光标置于要更新或删除的行上。

  2. 使用以下语法构造定位的 update 或 delete 语句:

    UPDATEtable-name

    SET列标识符= {expression | NULL}

    [column-identifier= {expression | NULL}]

    WHERE CURSOR-name的 CURRENT

    DELETE FROMtable-nameWHERE CURRENT OFcursor-name

    在定位更新语句中构造 SET 子句的最简单方法是对要更新的每个列使用参数标记,并使用 SQLBindParameter 将这些标记绑定到行集缓冲区,以便更新行。 在这种情况下,参数的 C 数据类型将与行集缓冲区的 C 数据类型相同。

  3. 如果当前行将执行定位的更新语句,则汇报当前行的行集缓冲区。 成功执行定位的更新语句后,游标库会将当前行中每一列的值复制到其缓存中。

    注意

    如果应用程序在执行定位的更新语句之前未正确更新行集缓冲区,则执行该语句后缓存中的数据将不正确。

  4. 使用与游标关联的语句不同的语句执行定位的更新或删除语句。

    注意

    游标库构造的用于标识当前行的 WHERE 子句可能无法识别任何行、无法标识不同的行或标识多个行。 有关详细信息,请参阅 构造搜索语句

所有定位的 update 和 delete 语句都需要游标名称。 若要指定游标名称,应用程序会在打开游标之前调用 SQLSetCursorName 。 若要使用驱动程序生成的游标名称,应用程序会在打开游标后调用 SQLGetCursorName

游标库执行定位更新或删除语句后,由游标库维护的状态数组、行集缓冲区和缓存包含下表中显示的值。

使用的语句 行状态数组中的值 中的值

行集缓冲区
中的值

缓存缓冲区
定位更新 SQL_ROW_UPDATED 新值[1] 新值[1]
定位删除 SQL_ROW_DELETED 旧值 旧值

[1] 应用程序在执行定位的 update 语句之前,必须更新行集缓冲区中的值;执行定位更新语句后,游标库将行集缓冲区中的值复制到其缓存中。