27,580
社区成员
发帖
与我相关
我的任务
分享
@@FETCH_STATUS
返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
返回值 描述
0 FETCH 语句成功。
-1 FETCH 语句失败或此行不在结果集中。
-2 被提取的行不存在。
语法
@@FETCH_STATUS
返回类型
integer
注释
由于 @@FETCH_STATUS 对于在一个连接上的所有游标是全局性的,要小心使用 @@FETCH_STATUS 。在执行一条 FETCH 语句后,必须在对另一游标执行另一 FETCH 语句前测试 @@FETCH_STATUS 。在任何提取操作出现在此连接上前,@@FETCH_STATUS 的值没有定义。
例如,用户从一个游标执行一条 FETCH 语句,然后调用一个存储过程,此存储过程打开并处理另一个游标的结果。当控制从被调用的存储过程返回后,@@FETCH_STATUS 反映的是在存储过程中执行的最后的 FETCH 语句的结果,而不是在存储过程被调用之前的 FETCH 语句的结果。
示例
下面的示例用 @@FETCH_STATUS 控制在一个 WHILE 循环中的游标活动。
DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName FROM Northwind.dbo.Employees
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor
begin
declare @列a decimal( 9,2)
declare @列b decimal( 9,2)
declare @列c decimal( 9,2)
declare @列abc decimal( 9,2)
declare @列d decimal( 9,2)
declare @列e decimal( 9,2)
declare @列f decimal( 9,2)
declare cur cursor for select 列A,列B,列C,列ABC,列d,列e,列f from tb
open cur
fetch next from cur into @列a , @列b , @列c , @列abc , @列d , @列e , @列f
while @@fetch_status=0
begin
if( @列d = '员工')
begin
Set @列abc = @列a + @列b +@列c
set @列e = @列abc * @列a * 0.8
---------------some caculate
end
if( @列d = '职员')
begin
Set @列abc = @列a + @列b +@列c
set @列e = @列abc * @列a * 0.2
end
---------------some caculate
set @列f = @列e- @列a
--但是最终更新的时候我是这样写的.--- 游标更新的方法 WHERE CURRENT OF cur
update tb set 列abc = @列A, 列f = @列f --, 列g = @列g-- .................
WHERE CURRENT OF cur
--执行下移一行
fetch next from cur into @列a , @列b , @列c , @列abc , @列d , @列e , @列f
end
end