提取和滚动

从游标中检索行的操作称为提取。提取选项如下:

  • 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::GetNextRowsIRowsetLocate::GetRowsAtIRowsetLocate::GetRowsAtBookmarkIRowsetScroll::GetRowsAtRatio

  • ODBC 使用 SQLFetch 函数,它与用于一行的 FETCH NEXT 或 SQLFetchScroll 相同。SQLFetchScroll 支持块状游标和所有的提取选项(FIRST、LAST、NEXT、PRIOR、ABSOLUTE、ABSOLUTE)。

  • ADO 使用 MoveMoveFirstMoveLastMoveNextMovePreviousRecordset 方法在游标中定位。然后使用 GetRows 记录集方法在那个位置检索一行或多行。也可直接调用 GetRows,将其中的 Start 参数设为想要提取的行数。