麻烦高手帮我看看这个存储过程有什么问题,为什么运行时会出现资源不足

yiyezhiqiu 2005-03-30 04:43:43

ALTER PROCEDURE dbo.UpdateAllBusinessDay @calday DateTime AS
DECLARE @businessno int, @businesscallinno varchar(32)
declare @usercountG int,@usercountC int
declare business_cursor Cursor for
select BusinessNo ,BusinessCallinNo from Business

open business_cursor
FETCH NEXT FROM business_cursor
INTO @businessno, @businesscallinno
WHILE @@FETCH_STATUS = 0

-----------------------------------

BEGIN

select distinct Caller from c_CallLog
where dbo.GetSimpDate(begintime)=dbo.GetSimpDate(@calday) and (Callee=@businesscallinno)
and (left(Caller,3)between 130 and 132)

GROUP by Caller
set @usercountG= @@rowcount
select @usercountG


select distinct Caller from c_CallLog where dbo.GetSimpDate(begintime)=dbo.GetSimpDate(@calday) and Callee=@businesscallinno
and (left(Caller,3)between 133 and 134)
set @usercountC= @@rowcount
select @usercountC

UPDATE BusinessDay
SET UsedCountG = @usercountG
FROM BusinessDay where CalDay=dbo.GetSimpDate(@calday) and BusinessNo=@businesscallinno
end

FETCH NEXT FROM business_cursor
INTO @businessno, @businesscallinno
-----------------------------------
--END
close business_cursor
Deallocate business_cursor

...全文
79 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiyezhiqiu 2005-03-30
  • 打赏
  • 举报
回复
谢谢老大
zjcxc 元老 2005-03-30
  • 打赏
  • 举报
回复

ALTER PROCEDURE dbo.UpdateAllBusinessDay
@calday DateTime
AS
DECLARE @businessno int, @businesscallinno varchar(32)
declare @usercountG int,@usercountC int

declare business_cursor Cursor for
select BusinessNo ,BusinessCallinNo from Business

open business_cursor
FETCH NEXT FROM business_cursor
INTO @businessno, @businesscallinno
WHILE @@FETCH_STATUS = 0

-----------------------------------

BEGIN

select distinct Caller from c_CallLog
where dbo.GetSimpDate(begintime)=dbo.GetSimpDate(@calday)
and (Callee=@businesscallinno)
and (left(Caller,3)between 130 and 132)

-- GROUP by Caller --这个没有意思,已经有distinct了,就没有必要再group by
set @usercountG= @@rowcount
select @usercountG


select distinct Caller from c_CallLog
where dbo.GetSimpDate(begintime)=dbo.GetSimpDate(@calday)
and Callee=@businesscallinno
and (left(Caller,3)between 133 and 134)
set @usercountC= @@rowcount
select @usercountC

UPDATE BusinessDay
SET UsedCountG = @usercountG
FROM BusinessDay
where CalDay=dbo.GetSimpDate(@calday) and BusinessNo=@businesscallinno
-- end --放在这里的话,就会死循环

FETCH NEXT FROM business_cursor
INTO @businessno, @businesscallinno
-----------------------------------
END --放在这里才是正确的
close business_cursor
Deallocate business_cursor


pbsql 2005-03-30
  • 打赏
  • 举报
回复
...
end --这个end不需要

FETCH NEXT FROM business_cursor
INTO @businessno, @businesscallinno
-----------------------------------
--END--这个end是需要的
close business_cursor
Deallocate business_cursor

34,590

社区成员

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

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