Hai una serie di problemi. Innanzitutto, perché stai utilizzando i tuoi valori @@FETCH_STATUS specifici? Dovrebbe essere solo @@FETCH_STATUS =0.
Secondo, non stai selezionando il cursore interno in qualsiasi cosa. E non riesco a pensare a nessuna circostanza in cui potresti selezionare tutti i campi in questo modo:scrivili!
Ecco un esempio da seguire. La cartella ha una chiave primaria di "ClientID" che è anche una chiave esterna per Attendere. Sto solo stampando tutti gli UID di partecipazione, suddivisi per 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;
Infine, sei SICURO vuoi fare qualcosa del genere in una procedura memorizzata? È molto facile abusare delle stored procedure e spesso riflette problemi nel caratterizzare il tuo problema. L'esempio che ho fornito, ad esempio, potrebbe essere realizzato molto più facilmente utilizzando chiamate di selezione standard.