“游标已存在”和“游标已打开”的错误。每次执行下面的存储过程,然后取消查询都会出现 
“消息 16915,级别 16,状态 1,过程 Nsp_ImpTanHouse_GSHP_Solar_Datas,第 41 行
名为 'convertCursor' 的游标已存在。
消息 16905,级别 16,状态 1,过程 Nsp_ImpTanHouse_GSHP_Solar_Datas,第 46 行
游标已打开。(1 行受影响)(1 行受影响)(1 行受影响)”


问题:    “游标已存在”和“游标已打开”为什么会出现???  是因为查询没有执行完,被我取消了吗?

ALTER proc [dbo].[Nsp_ImpTanHouse_GSHP_Solar_Datas]
as
declare @DANo            Char(32)
declare @DATime          Datetime
declare @LogTime          Datetime
declare @MeterType        Char(4)
declare @MeterNo          Char(20)
declare @Qty              Decimal(18,6)
declare @sql              nvarchar(800)                      declare convertCursor cursor for 
select replace(replace(replace(replace(convert(nvarchar(25),getdate(),121),'-',''),' ',''),':',''),'.','')  as DANo,
[Datetime] as DATime,[Datetime] as LogTime,'' as MeterType,PointCode as MeterNo,DataValue as Qty  from 
TanHouse.dbo.T_Dalist
where   lable = 0  or  lable is null
order by DATime  asc
open convertCursor
fetch next from convertCursor into @DANo,@DATime,@LogTime,@MeterType,@meterno,@Qty
while @@FETCH_STATUS=0
begin
  begin
     insert into TanHouse_GSHP_Solar_Datas(DANo,DATime,LogTime,MeterType,Qty,MeterNo) values (@DANo,@DATime,@LogTime,@MeterType,@Qty,@MeterNo)
     begin
     set @sql='Update TanHouse.dbo.T_Dalist  set lable=1 where PointCode='''+@MeterNo+''' and   [Datetime]='''+convert(nvarchar(25),@DATime,120)+''''
     --print @sql
     exec (@sql)
    end 
  end
fetch next from  convertCursor into @DANo,@DATime,@LogTime,@MeterType,@meterno,@Qty
   end
close convertCursor
deallocate convertCursor
set nocount on

解决方案 »

  1.   

    close convertCursor
    deallocate convertCursor取消查询,这两句执行不到。再次查询就提示已经存在了,是吗?
      

  2.   

    你把这个fetch语句去掉看看
    --fetch next from  convertCursor into @DANo,@DATime,@LogTime,@MeterType,@meterno,@Qty
       end
    close convertCursor
    deallocate convertCursor
      

  3.   

    检查TanHouse_GSHP_Solar_Datas,TanHouse.dbo.T_Dalist上是否有触发器.
      

  4.   

    set nocount on 这个放在as 后面,set nocount off放在最后
      

  5.   

    在 as 之前加一个 begin在 deallocate convertCursor 之后,加一个 end 把 set nocount on 干掉不要了重新建这个过程,再新建一个会话,再跑跑看。
      

  6.   

    declare convertCursor cursor LOCAL for --加Local试试
      

  7.   

    遇到过 类似问题,加上  local 后 解决了,谢谢 roy_88