2013-07-25 34 views
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 

回答

0

我不知道爲什麼你從來沒有停止,但我總是用以下條件

while @@sqlstatus = 0 

所以儘量用它代替的

WHILE (@@sqlstatus != 2) 
0

你將需要檢查的獲取狀態與此:

WHILE @@FETCH_STATUS = 0

將您的光標循環放在數據的值將意味着我如果退出值從未達到,則爲無限循環。