提取和滚动
从游标中检索行的操作称为提取。提取选项如下:
FETCH FIRST
提取游标中的第一行。
FETCH NEXT
提取上一个提取行后面的行。
FETCH PRIOR
提取上一个提取行前面的行。
FETCH LAST
提取游标中的最后一行。
FETCH ABSOLUTE n
如果 n 为正整数,则提取游标中从第 1 行开始的第 n 行。如果 n 为负整数,则提取游标中的倒数第 n 行。如果 n 为 0,则不提取行。
FETCH RELATIVE n
提取从上一个提取行数起的第 n 行。如果 n 为正数,则提取上一个提取行后面的第 n 行。如果 n 为负数,则提取上一个提取行前面的第 n 行。如果 n 为 0,则再次提取同一行。
打开游标时,游标中当前行的位置逻辑上应位于第一行之前。这使不同的提取选项具有下列行为(如果这些提取操作是打开游标后的第一次提取操作):
FETCH FIRST
提取游标中的第一行。
FETCH NEXT
提取游标中的第一行。
FETCH PRIOR
不提取行。
FETCH LAST
提取游标中的最后一行。
FETCH ABSOLUTE n
如果 n 为正整数,则提取游标中从第 1 行开始的第 n 行。如果 n 为负整数,则提取游标中的倒数的第 n 行(例如,n = -1 返回游标中的最后一行)。如果 n 为 0,则不提取行。
FETCH RELATIVE n
如果 n 为正数,则提取游标中的第 n 行。如果 n 为负数或 0,则不提取行。
Transact-SQL 游标限于一次只能提取一行。API 服务器游标则支持每次提取时提取一批行。支持一次提取多行的游标称为块状游标。
游标分类
游标可以按照它所支持的提取选项进行分类:
只进
必须按照从第一行到最后一行的顺序提取行。FETCH NEXT 是唯一允许的提取操作。
可滚动
可以在游标中任何地方随机提取任意行。允许所有的提取操作(但动态游标不支持绝对提取)。
可滚动游标对支持联机应用程序特别有用。可将游标映射为应用程序中的表格或列表框。随着用户向上、向下和在整个表格中滚动,应用程序使用滚动提取从游标中检索用户想要查看的行。
用于提取行的 API
实际使用的语句、函数或方法的 API 都有不同的名称来提取行:
Transact-SQL 游标使用 FETCH FIRST、FETCH LAST、FETCH NEXT、FETCH PRIOR、FETCH ABSOLUTE(n) 和 FETCH RELATIVE(n) 语句。
OLE DB 使用如下方法:IRowset::GetNextRows、IRowsetLocate::GetRowsAt、IRowsetLocate::GetRowsAtBookmark 和 IRowsetScroll::GetRowsAtRatio。
ODBC 使用 SQLFetch 函数,它与用于一行的 FETCH NEXT 或 SQLFetchScroll 相同。SQLFetchScroll 支持块状游标和所有的提取选项(FIRST、LAST、NEXT、PRIOR、ABSOLUTE、ABSOLUTE)。
ADO 使用 Move、MoveFirst、MoveLast、MoveNext 和 MovePreviousRecordset 方法在游标中定位。然后使用 GetRows 记录集方法在那个位置检索一行或多行。也可直接调用 GetRows,将其中的 Start 参数设为想要提取的行数。