Masz różne problemy. Po pierwsze, dlaczego używasz określonych wartości @@FETCH_STATUS? Powinno to być po prostu @@FETCH_STATUS =0.
Po drugie, nie wybierasz swojego wewnętrznego Kursora do byle co. I nie wyobrażam sobie żadnej okoliczności, w której można by wybrać wszystkie pola w ten sposób – przeliteruj je!
Oto próbka. Folder ma klucz podstawowy „ClientID”, który jest również kluczem obcym programu Attend. Po prostu drukuję wszystkie identyfikatory Attend UID, podzielone według folderu 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;
Wreszcie, czy NA PEWNO? chcesz zrobić coś takiego w procedurze składowanej? Nadużywanie zapisanych procedur jest bardzo łatwe i często odzwierciedla problemy w charakterystyce problemu. Na przykład próbka, którą podałem, może być znacznie łatwiej wykonana przy użyciu standardowych wywołań Select.