Important
此功能将在将来的 Windows 版本中删除。 避免在新开发工作中使用此功能,并计划修改当前使用此功能的应用程序。 Microsoft建议使用驱动程序的游标功能。
光标库支持定位式更新和删除语句,通过将此类语句中的 WHERE CURRENT OF 子句替换为 WHERE 子句,该子句枚举了缓存中存储的值,适用于每个绑定列。 光标库将新构建的 UPDATE and DELETE 语句传递给驱动程序执行。 对于定位更新语句,光标库随后从行集缓冲区的值更新缓存,并将行状态数组中的对应值设置为SQL_ROW_UPDATED。 对于定位删除语句,它会将行状态数组中的对应值设置为SQL_ROW_DELETED。
注意
光标库构建的 WHERE 子句用于识别当前行,可能无法识别任何行、识别不同行或识别多行。 更多信息请参见附录后面的 “构建搜索语句”。
定位更新和删除语句受以下限制:
定位式更新和删除语句仅能在以下情况下使用:当 SELECT 语句生成结果集时;当 SELECT 语句中没有join、 UNION 子句或 GROUP BY 子句时;以及当选择列表中使用别名或表达式的列未绑定 SQLBindCol 时。
如果应用程序准备定位的更新或删除语句,必须在调用 SQLFetch 或 SQLFetchScroll 之后进行。 虽然光标库会将语句提交给驱动程序准备,但当应用程序调用 SQLExecute 时,它会关闭该语句并直接执行。
如果驱动程序只支持一个激活语句,光标库会取出其余结果集,然后在执行定位的更新或删除语句前,从缓存中重新获取当前行集。 如果应用程序调用返回结果集元数据的函数(例如 SQLNumResultCols 或 SQLDescribeCol),光标库返回错误。
如果在包含时间戳列且每次更新时自动更新的时间戳列上执行定位的更新或删除语句,那么所有后续位置的更新或删除语句都将失败,且该时间戳列被绑定。 这是因为光标库创建的搜索更新或删除语句无法准确识别要更新的行。 搜索语句中时间戳列的值不会与自动更新的时间戳列值不匹配。