0
/*CREATE TABLE m_b (code VARCHAR(10),itemcount INT,type VARCHAR(30),amount  MONEY)        
insert into m_b values ('B001',1,'Dell',10)
insert into m_b values ('B001',1,'Dell',10)
insert into m_b values ('B001',1,'Apple',10)
insert into m_b values ('B001',2,'Apple',20)
insert into m_b values ('B001',2,'Apple',20)
insert into m_b values ('B114',1,'Apple',30.5)
insert into m_b values ('B114',1,'Apple',10) */

 --SELECT * INTO #temp FROM m_c  WHERE 1=2

DECLARE cur_test CURSOR 
 FOR SELECT Jobid,start,end_date,dayrate FROM m_c 

 go

DECLARE @Jobid INT
DECLARE @start DATE,@end_date DATE
DECLARE @dayrate INT 

OPEN cur_test
FETCH cur_test INTO @Jobid,@start,@end_date,@dayrate

--BEGIN 
DECLARE @jan INT

SET @jan=0

WHILE (@@sqlstatus != 2)

BEGIN

  IF month(@start)=1 
  BEGIN

    SELECT @jan= @jan + datediff(dd,'2013-01-31',@start)
    -- testing purpose
    INSERT INTO #temp VALUES (@jan,@start,@end_date,56)
  END 

  IF month(@end_date)=1 
  BEGIN

    SELECT @jan= @jan + datediff(dd,'2013-01-31',@end_date)
    -- testing purpose
    INSERT INTO #temp VALUES (@jan,@start,@end_date,57)

  END 

  FETCH cur_test INTO @Jobid,@start,@end_date,@dayrate

END


SELECT @jan

WAITFOR  delay '00:00:10'

CLOSE  cur_test

DEALLOCATE CURSOR cur_test
--END 

SELECT * FROM #temp

--TRUNCATE TABLE #temp
4

2 回答 2

0

我不知道为什么你永远不会停止,但我总是使用以下条件

while @@sqlstatus = 0

所以尝试使用它而不是

WHILE (@@sqlstatus != 2)
于 2013-07-25T13:08:43.833 回答
0

您将需要使用以下命令检查获取状态:

而@@FETCH_STATUS = 0

如果永远无法达到退出值,则基于数据值的光标循环将意味着无限循环。

于 2013-07-25T13:08:58.777 回答