如何迭代游标

时间:2011-01-25 08:13:17

标签: sql-server sql-server-2005

我有一个返回单行的select语句。 之后我写了一个游标,就像我@@ fetch_status是-1它现在不进入游标内

open cur_mkt    
print @init 
While (@init = 0)      
Begin      
fetch next from cur_mkt into       
@Desc,      
@Divisions      
print @@fetch_status
if (@@fetch_status =-1)      
BREAK   

有什么方法可以进入光标, 请帮帮我。

1 个答案:

答案 0 :(得分:11)

这听起来不像你需要一个光标(你应该尽量避免使用它)。如果你确定存在结果,你可以这样做:

SELECT @Desc = Desc, @Divisions = Divisions
FROM YourTable
WHERE ID = 1

IF ( @@ROWCOUNT > 0 )
    BEGIN
        -- Row was found
    END

所以我建议不要使用游标。

要直接回答这个问题,你使用游标/迭代结果的方式如下:

DECLARE @A INTEGER

DECLARE cur_mkt CURSOR FOR
SELECT 1 AS A 
UNION ALL
SELECT 2 AS A

OPEN cur_mkt
FETCH NEXT FROM cur_mkt INTO @A

WHILE (@@FETCH_STATUS = 0)
    BEGIN
        PRINT @A    
        FETCH NEXT FROM cur_mkt INTO @A
    END

CLOSE cur_mkt
DEALLOCATE cur_mkt