关于游标的问题(20分)

陈晨

Unregistered / Unconfirmed
GUEST, unregistred user!
DECLARE Employee_Cursor CURSOR FOR SELECT name, id
FROM base_data
WHERE id = id 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

为何上面这一段只能得到一条纪录???
base_data 里面不止1条纪录??
 
我觉得应该很简单的,例子是从sql server 帮助里面改的,
可是就是没有出现,符合条件的所有纪录
 
还是整个儿的贴出来吧,
可有是FETCH语句用法错了!
其实用不着fetch next from ,只要fetch cur into @val就可以了
 
这就是全部了,我在sql server 里面写的
 
那就一定错了!
首先,where语句中的"id = id"不知道是什么意思!全部数据?
关键是fetch语句,fetch给谁,干什么?
看看下面这段,不知是否对你有帮助:
declare @name varchar(20), @id int
declare @@i int
set @@i = 1
DECLARE Employee_Cursor CURSOR FOR
SELECT name, id FROM base_data WHERE id = @@i
OPEN Employee_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH Employee_Currsor into @name, @id
print('name=' + @name + '; id = ' + cast(@id as char))
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor
 
ok,我在学习游标,不知道为什么我的代码只能返回一条纪录???


 
游标被open后,得到的是一个指针串,当前指针指在哪里,就只能得到哪里的数据。
你把游标open后,不停的fetch,人为的把当前指针移到了最后一条数据,前面的数据有,但是被略过了!
另外,从你的代码中,我没有找到你是从什么地方得到数据后进行处理的,所以你的代码和
select name, id from base_data where id = id
last
得到的效果应该是等同的!
 
顶部