Máte různé problémy. Za prvé, proč používáte své konkrétní hodnoty @@FETCH_STATUS? Mělo by být pouze @@FETCH_STATUS =0.
Za druhé, nevybíráte svůj vnitřní kurzor do cokoliv. A nenapadá mě žádná okolnost, kdy byste tímto způsobem vybrali všechna pole – napište je!
Zde je ukázka. Složka má primární klíč "ClientID", což je také cizí klíč pro Attend. Právě tisknu všechna Attend UID, rozdělená podle Folder ClientID:
Declare @ClientID int;
Declare @UID int;
DECLARE Cur1 CURSOR FOR
SELECT ClientID From Folder;
OPEN Cur1
FETCH NEXT FROM Cur1 INTO @ClientID;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Processing ClientID: ' + Cast(@ClientID as Varchar);
DECLARE Cur2 CURSOR FOR
SELECT UID FROM Attend Where [email protected];
OPEN Cur2;
FETCH NEXT FROM Cur2 INTO @UID;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Found UID: ' + Cast(@UID as Varchar);
FETCH NEXT FROM Cur2 INTO @UID;
END;
CLOSE Cur2;
DEALLOCATE Cur2;
FETCH NEXT FROM Cur1 INTO @ClientID;
END;
PRINT 'DONE';
CLOSE Cur1;
DEALLOCATE Cur1;
Konečně, JISTÝ? chcete něco takového dělat v uložené proceduře? Je velmi snadné zneužít uložené procedury a často odráží problémy při charakterizaci vašeho problému. Příklad, který jsem uvedl, by například mohl být mnohem snadněji proveden pomocí standardních výběrových volání.