Ein Cursor mit dem Namen ... ist nicht vorhanden

Hallo!

Ich hab eine Funktion, in der irgendwas mit den Cursors nicht zu stimmen scheint. Sobald man die Funktion aufruft kommt die Fehlermeldung „Ein Cursor mit dem Namen ‚cur_skb‘ ist nicht vorhanden.“ …ich sch*** jetzt schon den halben Vormittag damit herum und komm einfach nicht weiter!

Hier der Code:
ALTER FUNCTION dbo._SOURCE_test (@nutzung nvarchar(50), @date datetime)
RETURNS integer
AS
BEGIN
DECLARE @anz integer

if(@nutzung = ‚Eigennutzung SKB‘)
begin
declare cur_skb cursor for
SELECT COUNT(ObjektID) AS EigennutzungAnzahl
FROM dbo.Mietobjekte
GROUP BY EigennutzungSKB
HAVING (EigennutzungSKB 0)

OPEN cur_skb
FETCH NEXT FROM cur_skb INTO @anz
CLOSE cur_skb
DEALLOCATE cur_skb
end
else
if(@nutzung=‚Leerstehung‘)
begin
declare cur_skb cursor for
SELECT COUNT(ObjektID) AS LeerstehungenAnzahl
FROM dbo.Mietobjekte
WHERE (EigennutzungSKB = 0) AND (NOT (ObjektID IN (SELECT DISTINCT ObjektID FROM Vermietungen))) OR
(ObjektID IN (SELECT ObjektID FROM Vermietungen WHERE BisDatum = @date)))

OPEN cur_skb
FETCH NEXT FROM cur_skb INTO @anz
CLOSE cur_skb
DEALLOCATE cur_skb
end
else
declare cur_skb cursor for
SELECT COUNT(dbo.Vermietungen.NutzungID)
FROM dbo.Vermietungen INNER JOIN dbo.Nutzung ON dbo.Nutzung.NutzungID = dbo.Vermietungen.NutzungID
WHERE (BisDatum IS NULL OR BisDatum >= @date)
AND Nutzung = @nutzung

OPEN cur_skb
FETCH NEXT FROM cur_skb INTO @anz
CLOSE cur_skb
DEALLOCATE cur_skb

RETURN (@anz)
END

Hallo,

wenn Der Select keine Werte zurückgibt, gibt es auch keinen Cursor soviel ich weiß. Du musst vor dem Fetch den Cursorstatus abfragen, auf jeden Fall aber vor dem Schließen. Dazu gibt es Statusvariablen im Cursor, z.B. cur_name%ISOPEN

Gruß

Peter