FETCH NEXT FROM是啥意思

cobby2008 2011-05-04 10:55:22
1) 计算订单的总额
use NorthWind
GO
DECLARE @each money,@total money
set @total=0
DECLARE totalcur CURSOR
LOCAL SCROLL
FOR
SELECT (UnitPrice*Quantity*(1-Discount)) as each FROM [Order Details]
open totalcur
FETCH NEXT FROM totalcur into @each
WHILE @@FETCH_STATUS=0
BEGIN
set @total=@total+@each
FETCH NEXT FROM totalcur into @each
END
CLOSE totalcur
DEALLOCATE totalcur
print @total
GO
...全文
6466 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxl5u 2011-11-04
  • 打赏
  • 举报
回复
好多结果了...没得说了让我
CainLai 2011-05-05
  • 打赏
  • 举报
回复
就你的代码来说就是把(UnitPrice*Quantity*(1-Discount))这个值取到了@each变量中
ly745455 2011-05-05
  • 打赏
  • 举报
回复
这个可以结贴了。
javatemptation 2011-05-05
  • 打赏
  • 举报
回复
FETCH NEXT
紧跟当前行返回结果行,并且当前行递增为返回行。如果 FETCH NEXT 为对游标的第一次提取操作,则返回结果集中的第一行。NEXT 为默认的游标提取选项。
jdzfjfhnui 2011-05-05
  • 打赏
  • 举报
回复
SQL Server 2005 联机丛书(2007 年 9 月)

FETCH (Transact-SQL) 发送反馈
请参阅
全部折叠全部展开 语言筛选器: 全部语言筛选器: 多语言语言筛选器: Visual Basic语言筛选器: C#语言筛选器: C++语言筛选器: J#语言筛选器: JScript

Visual Basic(Declaration)
C#
C++
J#
JScript

通过 Transact-SQL 服务器游标检索特定行。

语法

FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
[ INTO @variable_name [ ,...n ] ]


参数
NEXT
紧跟当前行返回结果行,并且当前行递增为返回行。如果 FETCH NEXT 为对游标的第一次提取操作,则返回结果集中的第一行。NEXT 为默认的游标提取选项。

PRIOR
返回紧邻当前行前面的结果行,并且当前行递减为返回行。如果 FETCH PRIOR 为对游标的第一次提取操作,则没有行返回并且游标置于第一行之前。

FIRST
返回游标中的第一行并将其作为当前行。

LAST
返回游标中的最后一行并将其作为当前行。

ABSOLUTE { n | @nvar}
如果 n 或 @nvar 为正数,则返回从游标头开始的第 n 行,并将返回行变成新的当前行。如果 n 或 @nvar 为负数,则返回从游标末尾开始的第 n 行,并将返回行变成新的当前行。如果 n 或 @nvar 为 0,则不返回行。n 必须是整数常量,并且 @nvar 的数据类型必须为 smallint、tinyint 或 int。

RELATIVE { n | @nvar}
如果 n 或 @nvar 为正数,则返回从当前行开始的第 n 行,并将返回行变成新的当前行。如果 n 或 @nvar 为负数,则返回当前行之前第 n 行,并将返回行变成新的当前行。如果 n 或 @nvar 为 0,则返回当前行。在对游标完成第一次提取时,如果在将 n 或 @nvar 设置为负数或 0 的情况下指定 FETCH RELATIVE,则不返回行。n 必须是整数常量,@nvar 的数据类型必须为 smallint、tinyint 或 int。

GLOBAL
指定 cursor_name 是指全局游标。

cursor_name
要从中进行提取的打开的游标的名称。如果同时具有以 cursor_name 作为名称的全局和局部游标存在,则如果指定为 GLOBAL,则 cursor_name 是指全局游标,如果未指定 GLOBAL,则指局部游标。

@cursor_variable_name
游标变量名,引用要从中进行提取操作的打开的游标。

INTO @variable_name[,...n]
允许将提取操作的列数据放到局部变量中。列表中的各个变量从左到右与游标结果集中的相应列相关联。各变量的数据类型必须与相应的结果集列的数据类型匹配,或是结果集列数据类型所支持的隐式转换。变量的数目必须与游标选择列表中的列数一致。

备注
如果 SCROLL 选项未在 SQL-92 样式的 DECLARE CURSOR 语句中指定,则 NEXT 是唯一受支持的 FETCH 选项。如果在 SQL-92 样式的 DECLARE CURSOR 语句中指定了 SCROLL 选项,则支持所有 FETCH 选项。

如果使用 Transact-SQL DECLARE 游标扩展插件,则应用下列规则:

如果指定了 FORWARD_ONLY 或 FAST_FORWARD,则 NEXT 是唯一受支持的 FETCH 选项。


如果未指定 DYNAMIC、FORWARD_ONLY 或 FAST_FORWARD 选项,并且指定了 KEYSET、STATIC 或 SCROLL 中的某一个,则支持所有 FETCH 选项。


DYNAMIC SCROLL 游标支持除 ABSOLUTE 以外的所有 FETCH 选项。


@@FETCH_STATUS 函数报告上一个 FETCH 语句的状态。相同的信息记录在由 sp_describe_cursor 返回的游标中的 fetch_status 列中。这些状态信息应该用于在对由 FETCH 语句返回的数据进行任何操作之前,以确定这些数据的有效性。有关详细信息,请参阅 @@FETCH_STATUS。

权限
FETCH 权限默认授予任何有效的用户。

示例
A. 在简单的游标中使用 FETCH

以下示例为 Person.Contact 表中姓氏以字母 B 开头的行声明了一个简单的游标,并使用 FETCH NEXT 逐个提取这些行。FETCH 语句以单行结果集形式返回在 DECLARE CURSOR 中指定的列的值。

复制代码
USE AdventureWorks
GO
DECLARE contact_cursor CURSOR FOR
SELECT LastName FROM Person.Contact
WHERE LastName LIKE 'B%'
ORDER BY LastName

OPEN contact_cursor

-- Perform the first fetch.
FETCH NEXT FROM contact_cursor

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM contact_cursor
END

CLOSE contact_cursor
DEALLOCATE contact_cursor
GO


B. 使用 FETCH 将值存入变量

以下示例与上面的示例相似,但 FETCH 语句的输出存储于局部变量而不是直接返回到客户端。PRINT 语句将变量组合成单一字符串并将其返回到客户端。

复制代码
USE AdventureWorks
GO
-- Declare the variables to store the values returned by FETCH.
DECLARE @LastName varchar(50), @FirstName varchar(50)

DECLARE contact_cursor CURSOR FOR
SELECT LastName, FirstName FROM Person.Contact
WHERE LastName LIKE 'B%'
ORDER BY LastName, FirstName

OPEN contact_cursor

-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.

FETCH NEXT FROM contact_cursor
INTO @LastName, @FirstName

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN

-- Concatenate and display the current values in the variables.
PRINT 'Contact Name: ' + @FirstName + ' ' + @LastName

-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM contact_cursor
INTO @LastName, @FirstName
END

CLOSE contact_cursor
DEALLOCATE contact_cursor
GO


C. 声明 SCROLL 游标并使用其他 FETCH 选项

以下示例创建一个 SCROLL 游标,使其通过 LAST、PRIOR、RELATIVE 和 ABSOLUTE 选项支持全部滚动功能。

复制代码
USE AdventureWorks
GO
-- Execute the SELECT statement alone to show the
-- full result set that is used by the cursor.
SELECT LastName, FirstName FROM Person.Contact
ORDER BY LastName, FirstName

-- Declare the cursor.
DECLARE contact_cursor SCROLL CURSOR FOR
SELECT LastName, FirstName FROM Person.Contact
ORDER BY LastName, FirstName

OPEN contact_cursor

-- Fetch the last row in the cursor.
FETCH LAST FROM contact_cursor

-- Fetch the row immediately prior to the current row in the cursor.
FETCH PRIOR FROM contact_cursor

-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM contact_cursor

-- Fetch the row that is three rows after the current row.
FETCH RELATIVE 3 FROM contact_cursor

-- Fetch the row that is two rows prior to the current row.
FETCH RELATIVE -2 FROM contact_cursor

CLOSE contact_cursor
DEALLOCATE contact_cursor
GO


请参阅
参考
CLOSE (Transact-SQL)
DEALLOCATE (Transact-SQL)
DECLARE CURSOR (Transact-SQL)
OPEN (Transact-SQL)

其他资源
Transact-SQL 游标

Rotel-刘志东 2011-05-05
  • 打赏
  • 举报
回复
从游标中取出下一行的数据。
Barton 2011-05-05
  • 打赏
  • 举报
回复
取游标中下一行数据赋值给变量@each
haosa 2011-05-05
  • 打赏
  • 举报
回复
从游标中取下一行
--小F-- 2011-05-04
  • 打赏
  • 举报
回复
取游标中下一行
rucypli 2011-05-04
  • 打赏
  • 举报
回复
从游标中取下一行
rucypli 2011-05-04
  • 打赏
  • 举报
回复
从游标中取下一行
obuntu 2011-05-04
  • 打赏
  • 举报
回复
紧跟当前行返回结果行,并且当前行递增为返回行。如果 FETCH NEXT 为对游标的第一次提取操作,则返回结果集中的第一行。NEXT 为默认的游标提取选项。
叶子 2011-05-04
  • 打赏
  • 举报
回复
游标 指的是下一条数据
快溜 2011-05-04
  • 打赏
  • 举报
回复
取游标指向的当前行的数据赋值给变量@each

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧