执行定位更新和删除语句
重要
Windows 的未来版本中将移除此功能。 避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。 Microsoft 建议使用驱动程序的游标功能。
应用程序使用 SQLFetchScroll 提取数据块后,可以更新或删除块中的数据。 若要执行定位更新或删除,应用程序:
调用 SQLSetPos 将光标置于要更新或删除的行上。
使用以下语法构造定位的 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 数据类型相同。
如果当前行将执行定位的更新语句,则汇报当前行的行集缓冲区。 成功执行定位的更新语句后,游标库会将当前行中每一列的值复制到其缓存中。
注意
如果应用程序在执行定位的更新语句之前未正确更新行集缓冲区,则执行该语句后缓存中的数据将不正确。
使用与游标关联的语句不同的语句执行定位的更新或删除语句。
注意
游标库构造的用于标识当前行的 WHERE 子句可能无法识别任何行、无法标识不同的行或标识多个行。 有关详细信息,请参阅 构造搜索语句。
所有定位的 update 和 delete 语句都需要游标名称。 若要指定游标名称,应用程序会在打开游标之前调用 SQLSetCursorName 。 若要使用驱动程序生成的游标名称,应用程序会在打开游标后调用 SQLGetCursorName 。
游标库执行定位更新或删除语句后,由游标库维护的状态数组、行集缓冲区和缓存包含下表中显示的值。
使用的语句 | 行状态数组中的值 | 中的值 行集缓冲区 |
中的值 缓存缓冲区 |
---|---|---|---|
定位更新 | SQL_ROW_UPDATED | 新值[1] | 新值[1] |
定位删除 | SQL_ROW_DELETED | 旧值 | 旧值 |
[1] 应用程序在执行定位的 update 语句之前,必须更新行集缓冲区中的值;执行定位更新语句后,游标库将行集缓冲区中的值复制到其缓存中。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈