写了个SQL游标,执行时却只是反复读取表中的第二条数据,请高手解惑

SQL语句如下

DECLARE @TempID int
DECLARE @MAINUSERID VARCHAR(3000)
DECLARE @mailContent VARCHAR(MAX)
DECLARE @choice varchar(200)
DECLARE @topic varchar(100)
DECLARE @arrangeID INT
DECLARE @endTime DATETIME
DECLARE @frequency varchar(500)
DECLARE @department INT
DECLARE @userID INT
DECLARE @awokeDate INT
DECLARE @childAwokeTime varchar(50)
DECLARE @CHILDUSERID VARCHAR(3000)
DECLARE childPlanCursor CURSOR FOR
SELECT choice,arrange_particularDetail.topic,arrangeID,arrange_particularDetail.endTime,frequency,department,awokeDate,awokeTime
FROM arrange_particularDetail,arrange_particularDepartmentPlan
WHERE arrange_particularDetail.timeBadge=arrange_particularDepartmentPlan.timeBadge
OPEN childPlanCursor

FETCH NEXT FROM childPlanCursor INTO @choice,@topic,@arrangeID,@endTime,@frequency,@department,@awokeDate,@childAwokeTime
while @@FETCH_STATUS=0
begin
select @awokeDate
SET @CHILDUSERID=''
if @frequency = 'WW'
begin
if @awokeDate=datepart(dw,getdate())
begin
IF @choice!=''
BEGIN
SET @CHILDUSERID=@choice
END
IF @choice=''
BEGIN
DECLARE CHILDDEPARTCURSOR CURSOR FOR
SELECT userID
FROM hr_employee,hr_users
WHERE UID=employeeID AND departmentID=@department

OPEN CHILDDEPARTCURSOR
FETCH NEXT FROM CHILDDEPARTCURSOR
INTO @CHILDuserID

WHILE @@FETCH_STATUS = 0
BEGIN
IF @CHILDUSERID!=''
BEGIN
SET @CHILDUSERID=@CHILDUSERID+'|'
END
SET @CHILDUSERID=@CHILDUSERID+CONVERT(VARCHAR(20),@CHILDuserID)
FETCH NEXT FROM CHILDDEPARTCURSOR
INTO @CHILDuserID
END
CLOSE CHILDDEPARTCURSOR
DEALLOCATE CHILDDEPARTCURSOR
END
SET @mailContent='计划提醒'
END
END
FETCH NEXT FROM childPlanCursor INTO @choice,@topic,@arrangeID,@endTime,@frequency,@department,@awokeDate,@childAwokeTime
END
close planCursor --关闭游标
deallocate planCursor

没有彻底研究过,但是至少可以肯定,还是有一点区别的,
as/is用在create or replace procedure/function is/as
这儿的时候是可以互相替换的,
但是如果是用于声明一个自定义变量的时候,比如
cursor cc is select name from tab ;
这里面的is不可以是as的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-27
childPlanCursor
这个游标未关闭,也未销毁啊追问

不好意思啊,游标的关闭和销毁,是写全的,只是没帖出来.不是这个原因

第2个回答  2011-07-30
检查你所有游标的条件是否正确
第3个回答  2011-08-02
没有执行next吧追问

如果没有执行next就不会进行循环了,现在是死循环啊

相似回答