提取和滚动

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

  • 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 参数设为想要提取的行数。

请参阅

其他资源

Fetching Rows
Scrolling and Fetching Rows
游标函数 (Transact-SQL)
FETCH (Transact-SQL)
Using Cursors

帮助和信息

获取 SQL Server 2005 帮助