CURSOR回圈如何判断到最后一笔了??

Jenny_Ming 2010-02-24 04:44:04
我有一个CURSOR的回圈...
我有什么方法可以判断目前读到的这笔是最后一笔吗??
...全文
182 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
netcup 2010-02-24
  • 打赏
  • 举报
回复
一般都是用@FETCH_STAUS=0判断的。
如果你要取最后一条记录的值,那么就用行号和MAX(行号)比较么
cxmcxm 2010-02-24
  • 打赏
  • 举报
回复
@@fetch_status=0
提取成功
DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title FROM AdventureWorks.HumanResources.Employee;
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0 --循环不断试读下一条,=0成功,最后一条这后,再下一条,<0,不成功
BEGIN
FETCH NEXT FROM Employee_Cursor;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
ChinaJiaBing 2010-02-24
  • 打赏
  • 举报
回复

--fetch next 游标名 into 变值
@@fetch_status --等于0,表示执行成功,其它不成功
fetch next 游标名 into 变值
鸭梨山大帝 2010-02-24
  • 打赏
  • 举报
回复
游标会提取多少比资料,你在开始的时候是知道的吧?
直接select count(0) from 你的游标需要提取的资料
定义一个当前笔数变量@iCount
然后再While( @@FETECH_STATUS =0)循环中 @iCount +1,跟 最大资料笔数 对比就知道了.

引用楼主 jenny_ming 的回复:
我有一个CURSOR的回圈...
我有什么方法可以判断目前读到的这笔是最后一笔吗??
sxdtgsh 2010-02-24
  • 打赏
  • 举报
回复
@@FETCH_STATUS不行的。
0 FETCH 语句成功。
-1 FETCH 语句失败或行不在结果集中。
-2 提取的行不存在
只能判断提取是否成功,不能判断是否是最后一条记录。

-- 定义变量
Declare
@TotalRec Int, // 游标记录总数
@CurRec Int, // 当前记录数
@A Varchar(255)
-- 定义游标
Decoare @Cursor for
  select A from A
select @TotalRec = Count(*)
from A
Set @CurRec = 0
Open @Cursor
Fetch Next From @Cursor Into @A
while (@@Fetch_Status = 0)
begin
Set @CurRec = @CurRec + 1
if @CurRec = @TotalRec
begin
-- 最后一行

end
Fetch Next From @Cursor Into @A
end
-狙击手- 2010-02-24
  • 打赏
  • 举报
回复
@@FETCH_STATUS
昵称被占用了 2010-02-24
  • 打赏
  • 举报
回复
@@FETCH_STATUS
SQL77 2010-02-24
  • 打赏
  • 举报
回复

FETCH NEXT FROM authors_cursor
INTO @au_id, @au_fname, @au_lname

WHILE @@FETCH_STATUS = 0
BEGIN

PRINT " "
SELECT @message = "----- Books by Author: " +
@au_fname + " " + @au_lname

PRINT @message

-- Declare an inner cursor based
-- on au_id from the outer cursor.

DECLARE titles_cursor CURSOR FOR
SELECT t.title
FROM titleauthor ta, titles t
WHERE ta.title_id = t.title_id AND
ta.au_id = @au_id -- Variable value from the outer cursor

OPEN titles_cursor
FETCH NEXT FROM titles_cursor INTO @title

IF @@FETCH_STATUS <> 0
PRINT " <<No Books>>"

WHILE @@FETCH_STATUS = 0
BEGIN

SELECT @message = " " + @title
PRINT @message
FETCH NEXT FROM titles_cursor INTO @title

END

CLOSE titles_cursor
DEALLOCATE titles_cursor

-- Get the next author.
FETCH NEXT FROM authors_cursor
INTO @au_id, @au_fname, @au_lname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO
htl258_Tony 2010-02-24
  • 打赏
  • 举报
回复
你可以在循环区内加上print语句.还不是很理解你所要的,最好可以上一段代码说明一下.

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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