关于游标的问题》》》》》

2000lhzh 2003-11-26 09:04:00
在存储过程中使用了游标,如下,
但在查询分析器中执行这个存储过程,总是提示游标已经存在????
begin
DECLARE @APID VARCHAR(15)
DECLARE @AUSTEP INT
DECLARE @AUSTEP_PRO INT
DECLARE @SHENPI_FLAG INT

DECLARE ShenPi_cursor CURSOR FOR
select distinct(a.ApplyId),b.AuditeStep from t_Apply a, t_Audite b where b.UserId=@UserId and b.Depart=@Depart and a.ApplyState=0 or a.ApplyState=1
OPEN ShenPi_cursor

FETCH NEXT FROM ShenPi_cursor INTO @APID, @AUSTEP
BEGIN
IF @AUSTEP=0
BEGIN
SET @AUSTEP_PRO=@AUSTEP
××××××
END
ELSE
BEGIN
SET @AUSTEP_PRO=@AUSTEP-1
SELECT @SHENPI_FLAG=AuditeDetail from t_Audite where ApplyId=@APID and AuditeStep=@AUSTEP_PRO
if @SHENPI_FLAG=3 or @SHENPI_FLAG=4 /*3-4都可以通过*/
BEGIN
××××××
END
END

END
CLOSE ShenPi_cursor
DEALLOCATE ShenPi_cursor

select * from #t_temp
drop TABLE #t_temp
end


DEALLOCATE ShenPi_cursor这句起什么作用???我是看帮助里面有才写入的》》》
...全文
41 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
welyngj 2003-11-26
  • 打赏
  • 举报
回复
对游标进行操作的语句使用游标名称或游标变量引用游标。DEALLOCATE 删除游标与游标名称或游标变量之间的关联。如果一个名称或变量是最后引用游标的名称或变量,则将释放游标,游标使用的任何资源也随之释放。用于保护提取隔离的滚动锁在 DEALLOCATE 上释放。用于保护更新(包括通过游标进行的定位更新)的事务锁一直到事务结束才释放。

2000lhzh 2003-11-26
  • 打赏
  • 举报
回复
谢谢。。我先试一下。。。

DECLARE ShenPi_cursor CURSOR FOR
select distinct(a.ApplyId),b.AuditeStep from t_Apply a, t_Audite b where b.UserId=@UserId and b.Depart=@Depart and a.ApplyState=0 or a.ApplyState=1

从这里面读数。。。

FETCH NEXT FROM ShenPi_cursor INTO @APID, @AUSTEP
读出的数放入@APID, @AUSTEP
两个变量中,,,通过这辆个变量去判断取数。。。。
pengdali 2003-11-26
  • 打赏
  • 举报
回复
你先执行一下:

DEALLOCATE ShenPi_cursor
wzh1215 2003-11-26
  • 打赏
  • 举报
回复
看不出楼主的游标在过程中有什么作用!
pengdali 2003-11-26
  • 打赏
  • 举报
回复
DEALLOCATE
删除游标引用。当释放最后的游标引用时,组成该游标的数据结构由 Microsoft® SQL Server™ 释放。

txlicenhe 2003-11-26
  • 打赏
  • 举报
回复
先运行以下代码,再运行该存储过程。
CLOSE ShenPi_cursor
DEALLOCATE ShenPi_cursor
btlxy 2003-11-26
  • 打赏
  • 举报
回复
WHILE @@FETCH_STATUS = 0
BEGIN

...........

END

btlxy 2003-11-26
  • 打赏
  • 举报
回复
利用循环While 不就可以吗
2000lhzh 2003-11-26
  • 打赏
  • 举报
回复
1--不要最后一句的话:DEALLOCATE ShenPi_cursor
提示ShenPi_cursor已经存在???
2--DEALLOCATE ShenPi_cursor 放在最上面同样只可以取到一条记录?

是什么原因???
2000lhzh 2003-11-26
  • 打赏
  • 举报
回复
现在在分析器中测试:
DECLARE @APID VARCHAR(15)
DECLARE @AUSTEP INT
DECLARE @AUSTEP_PRO INT
DECLARE @SHENPI_FLAG INT

DECLARE ShenPi_cursor CURSOR FOR
select distinct(a.ApplyId),b.AuditeStep from t_Apply a, t_Audite b
where b.UserId='孙伟平' and b.Depart='销售部' and a.ApplyState=0 or a.ApplyState=1

OPEN ShenPi_cursor

FETCH NEXT FROM ShenPi_cursor INTO @APID, @AUSTEP
print @APID
PRINT @AUSTEP

CLOSE ShenPi_cursor
DEALLOCATE ShenPi_cursor

就只能够取道第一条记录?是什么原因?

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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