關於遊標狀態的一個問題,請指教!

liyanmingkong 2008-02-22 09:24:42
爲什麽 IF CURSOR_STATUS('local', 'mycursor' )>0 判斷不好用 ,而local換成 global 就可以 判斷成功

IF EXISTS(SELECT NAME FROM sysobjects
WHERE NAME = 'PK_Test' AND TYPE = 'P')
DROP PROCEDURE PK_Test

Go
CREATE PROCEDURE PK_Test
AS
--声明3个变量
declare @emp_cd varchar(5)
declare @emp_name varchar(20)

--声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同
declare mycursor cursor for select emp_cd,emp_name from m_employee

--打开游标
IF not EXISTS (SELECT name FROM sysobjects
WHERE name = 'm_customer' AND type = 'u')
goto EXCEPTION
open mycursor

--从游标里取出数据赋值到我们刚才声明的2个变量中
fetch next from mycursor into @emp_cd,@emp_name

--判断游标的状态
--0 fetch语句成功
---1 fetch语句失败或此行不在结果集中
---2被提取的行不存在
while (@@fetch_status=0)
begin

--显示出我们每次用游标取出的值
print '遊標成功取出一條數據'
print @emp_cd
print @emp_name

--用游标去取下一条记录
fetch next from mycursor into @emp_cd,@emp_name
end

--IF CURSOR_STATUS('local', 'mycursor' )>0
BEGIN

--关闭游标
CLOSE mycursor

--撤销游标
DEALLOCATE mycursor
END

--:異常処理
EXCEPTION:

--关闭游标
CLOSE mycursor

--撤销游标
DEALLOCATE mycursor

GO
...全文
43 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wzy_love_sly 2008-02-22
好象该是局部,但怎么会是显示呵呵呢?
这个我也不特懂,等其他人帮忙吧!
回复
liyanmingkong 2008-02-22
局部游标:只在声明阶段使用
全局游标:可以在声明它们的过程,触发器外部使用

能幫我詳細説明一下他們的不同 嗎
回复
ojuju10 2008-02-22
謝謝,還是不大明白,declare @mycursor 和 declare mycursor 有什麽區別嗎

declare mycursor cursor for select emp_cd,emp_name from m_employee

默認定義是全局的 嗎?

---------
默认为局部游标
回复
wzy_love_sly 2008-02-22
declare cursor_tb cursor for
select id ,name FROM tb
declare @name varchar(10),@con int
open cursor_tb
IF CURSOR_STATUS('global','cursor_tb')> 0
print '呵呵'
else
print '西西'
close cursor_tb
deallocate cursor_tb

结果:
呵呵


应该是默认全局吧
declare @mycursor的是游标变量,我说错了,以为就是local了
回复
liyanmingkong 2008-02-22
謝謝,還是不大明白,declare @mycursor 和 declare mycursor 有什麽區別嗎

declare mycursor cursor for select emp_cd,emp_name from m_employee

默認定義是全局的 嗎?
回复
wzy_love_sly 2008-02-22
declare cursor_tb cursor local for
select id ,name FROM tb
declare @name varchar(10),@con int
open cursor_tb
IF CURSOR_STATUS('local','cursor_tb')> 0
print '呵呵'
else
print '西西'
close cursor_tb
deallocate cursor_tb


果然错了

回复
wzy_love_sly 2008-02-22
我对吗?
回复
wzy_love_sly 2008-02-22
游标也有局部和全局两种类型

局部游标:只在声明阶段使用
全局游标:可以在声明它们的过程,触发器外部使用
回复
wzy_love_sly 2008-02-22
declare @mycursor

用local
declare mycursor
用global


回复
你定义的是全局游标,判断局部游标当然找不到,改下定义吧

--声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同 
declare mycursor cursor for select emp_cd,emp_name from m_employee


======〉

--声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同
declare mycursor cursor local for select emp_cd,emp_name from m_employee




回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-02-22 09:24
社区公告
暂无公告