从游标中检索行的操作称为提取。提取选项如下:
- 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 参数设为想要提取的行数。
请参阅
其他资源
Fetching Rows
Scrolling and Fetching Rows
游标函数 (Transact-SQL)
FETCH (Transact-SQL)
Using Cursors