能否同时使用两个游标???????????????????????
在做存储过程时需要在一个while循环中嵌套一个while循环,每个while循环的判断条件都要用到
@@cursor_status,也就是说需要同时使用两个游标,麻烦的事就在这,@@cursor_status只有一个,
怎么办呢?是不是不仅有一个判断结束的全局变量?
问题点数:10、回复次数:3Top
1 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2006-03-03 15:56:36 得分 0
联机帮助里的例子——使用嵌套游标生成报表输出
------------------------------------------------------------------------------------------------------------------------------
下例显示如何嵌套游标以生成复杂的报表。为每个作者声明内部游标。
SET NOCOUNT ON
DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname varchar(40),
@message varchar(80), @title varchar(80)
PRINT "-------- Utah Authors report --------"
DECLARE authors_cursor CURSOR FOR
SELECT au_id, au_fname, au_lname
FROM authors
WHERE state = "UT"
ORDER BY au_id
OPEN authors_cursor
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
GOTop
2 楼wgsasd311(自强不息)回复于 2006-03-03 16:03:02 得分 0
完全可以,请看联机帮助一段话
@@FETCH_STATUS
返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
语法
@@FETCH_STATUS
返回类型
integer
注释
由于 @@FETCH_STATUS 对于在一个连接上的所有游标是全局性的,要小心使用 @@FETCH_STATUS 。在执行一条 FETCH 语句后,必须在对另一游标执行另一 FETCH 语句前测试 @@FETCH_STATUS 。在任何提取操作出现在此连接上前,@@FETCH_STATUS 的值没有定义。
例如,用户从一个游标执行一条 FETCH 语句,然后调用一个存储过程,此存储过程打开并处理另一个游标的结果。当控制从被调用的存储过程返回后,@@FETCH_STATUS 反映的是在存储过程中执行的最后的 FETCH 语句的结果,而不是在存储过程被调用之前的 FETCH 语句的结果。
Top
3 楼mislrb(上班看看早报,上上CSDN,下班看看电影)回复于 2006-03-03 16:13:36 得分 0
当然是可以,最主要是及时切换
FETCH NEXT FROM yourCursor into @var1,@var2
有点像VFP的,
select 1,在工作区1打开表A,进行表A移动,
再select 2,在工作区2打开表B,进行表B移动,
Top




